Rust学习第九天——控制测试运行

并行和连续执行测试

控制测试如何运行

  • 改变cargo test的行为:添加命令行参数

  • 默认行为:

  • 并行运行

  • 所有测试

  • 捕获(不显示)所有输出,使读取与测试结果相关的输出更容易

  • 命令行参数:

  • 针对cargo test的参数:紧跟cargo test 后

  • 针对测试可执行程序:放在--之后

  • cargo test --help

  • cargo test -- --help

并行运行测试

  • 运行多个测试:默认使用多个线程并行运行

  • 运行块

  • 确保测试之间:

  • 不会相互依赖

  • 不依赖于某个共享状态(环境、工作目录、环境变量等)

--test-threads参数

  • 传递给二进制文件

  • 不想以并行方式运行测试,或想对线程数进行细粒度控制

  • 可以使用--test-threads参数,后面跟着线程的数量

  • 例如:cargo test -- --test-threads=1

显式函数输出

  • 默认,如厕时通过,Rust的test库会捕获所有打印到标准输出的内容

  • 例如,如果是被测试代码中用到了println!:

  • 如果测试通过:不会在终端看到println!打印的内容

  • 如果测试失败:会看到println!打印和失败信息

  • 如果想在成功的测试中看到打印的内容:--show-output

  • (例子)

cargo test -- --show-output

按名称运行测试

按名称运行测试的子集

  • 选择运行的测试:将测试的名称(一个或多个)作为cargo test的参数

cargo test it_works(函数名)
  • 运行多个测试:指定测试名的一部分(模块名也可以)

忽略测试

忽略某些测试,运行剩余测试

  • ignore属性(attribute)

#[cfg(test)]
mod tests {
    // use super::*;

    #[test]
    fn it_works() -> Result<(), String> {
        if 2 + 2 == 4 {
            Ok(())
        } else {
            Err(String::from("two plus two dose not equal four"))
        }
    }

    #[test]
    #[ignore]
    fn expensive_test() {
        assert_eq!(5, 1 + 1 + 1 + 1 + 1);
    }
}
  • 运行被忽略的测试

cargo test -- --ignored

测试组织

测试的分类

  • Rust对测试的分类:

  • 单元测试

  • 集成测试

  • 单元测试

  • 小、专注

  • 一次对一个模块进行隔离的测试

  • 可测试private接口

  • 集成测试:

  • 在库外部。和其他外部代码一样使用你的代码

  • 只能使用public接口

  • 可能在每个测试中使用到多个模块

单元测试——#[cfg(test)]标注

  • test模块上的#[cfg(test)]标注

  • 只有运行cargo test才编译和运行代码

  • 运行cargo build则不会

  • 集成测试在不同的目录,它不需要#[cfg(test)]标注

  • cfg: configuration(配置)

  • 告诉Rust下面的条目只有在指定的配置选项下才被包含

  • 配置选项test:由Rust提供,用编译和运行测试

  • 只有cargo test才会编译代码,包括模块中的helper函数和#[test]标注的函数

测试私有函数

  • Rust允许测试私有函数

集成测试

集成测试

  • 在Rust里,集成测试完全位于被测试库的外部

  • 目的:是测试被测试库的多个部分是否能正确的一起工作

  • 集成测试的覆盖率很重要

test目录

  • 创建集成测试:test目录

  • tests目录下得每个测试文件都是单独的一个crate

  • 需要将被测试库导入

  • 无需标注#[cfg(test)], tests目录被特殊对待

运行指定的集成测试

  • 运行一个特定的集成测试:cargo test函数名

  • 运行某个测试文件内的所有测试:cargo test --test文件名

cargo test --test intergration_test

集成测试中的子模块

  • tests目录下每个文件被编译成单独的crate

  • 这些文件不共享行为(于src下得规则不同)

针对binary crate的集成测试

  • 如果项目是binary crate,只含有src/main.rs没有src/lib.rs:

  • 不能在tests目录下创建集成测试

  • 无法把main.rs的函数导入作用域

  • 只有把library crate才能暴露函数给其他crate用

  • binary crate意味着独立运行

总结

学着学着不知道自己为什么学了,算了,继续吧,学都学了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值