坏蛋Dan
知乎@坏蛋Dan
发布时间:2024.1.4

前言

昨天我们学会了如何创建测试函数和使用测试函数

坏蛋Dan:rust基础学习--day24

今天我们继续·往下学·


选择性测试

昨天我们都是直接cargo test,这样是会执行所有可测试代码的。

但是大多数时候我们只想测试某一块测试代码,这里下面我直接就叫测试元了,方便点。

我们来看下test相关的指令

终端执行cargo test --help

并行(parallel)或者按顺序(consecutively)执行测试元

rust中默认是按照基于多线程并行的方式执行测试元,这样就可以同时执行多个测试元,减少测试所需要的时间。

不过有一点需要注意,那就是这几个测试元之间不能相互依赖或者需求同一个数据,不然容易形成死锁。

如果不想让他们并行或者想要更细粒度(fine-grained)一点,你可以将线程调整为一个,这样同一时间就只能执行一个

-- --test-threads=1表示--之后可以执行test-threads=1这个选项。=1表示只有一个线程。


展示函数的输出

测试元执行的结果默认会输出在终端中,但是你println!等想看的数据是不会出现在终端中的。

当然,如果是failed的,你可以自定义错误语句并且它也会给出比较的数据(使用assert_eq!)。

这个昨天的文章中说过了,就不多说了。

但如果你也想输出成功的语句或者println!,那么就输入下面这个指令

来试下例子


使用名字选项来测试子集测试元

正如前面说的,多线程测试会很快,但是不安全。而单线程则会很慢。这个时候就需要折中,选择想要的测试元来测试。

我们先来看下例子

先来看下默认的输出

额,跑的有点快。。可以看到都输出了。

我们再来试下测试单个

直接在后面加个名字就能测试目标测试元

不过这种方式只能是测试某一个,并不能做到全部都测试


一次执行一批

和其他语言中的差不多,名字实际上也是模糊匹配的,我们有两个function名字里都有个addtwo,我们直接来试下

确实是找到了对应的测试元


忽略部分测试元

有时候你只是不想测试一两个,这个时候你用名字去匹配其实也可以,但是这就得你手动去改测试元的名字,这样就挺麻烦的。

这个时候就可以用到ignore,直接来看下怎么用

直接在#[test]下一行朱时#[ignore]。你以为还是输入选项?这样也麻烦,也是不符合人道滴。

那么过滤都过滤了,这些被过滤的不用白不用。

官方也提供了选项让我们反过来测试被ignore的测试元

但是这么做的话,当你想测试所有测试元的时候就做不到了。

官方显然也知道这一点,所以这里还有一个选项


总结

这样我们就能随心所欲的测试某个测试元了。

这两天的内容都挺轻松的(相比于第十章)。

最后,如果这篇文章对你有帮助的话,请务必点个赞谢谢

参考

  1. ^rust-controlling-how-tests-are-run https://doc.rust-lang.org/book/ch11-02-running-tests.html#controlling-how-tests-are-run
  2. ^test-in-parallel-or-consecutively https://doc.rust-lang.org/book/ch11-02-running-tests.html#running-tests-in-parallel-or-consecutively
  3. ^rust-showing-function-output https://doc.rust-lang.org/book/ch11-02-running-tests.html#showing-function-output
  4. ^rust-running-a-subset-by-name https://doc.rust-lang.org/book/ch11-02-running-tests.html#running-a-subset-of-tests-by-name
  5. ^filtering-to-run-multiple-tests https://doc.rust-lang.org/book/ch11-02-running-tests.html#filtering-to-run-multiple-tests
  6. ^rust-ignored-some-tests https://doc.rust-lang.org/book/ch11-02-running-tests.html#ignoring-some-tests-unless-specifically-requested

发布于 2022-12-19 22:03・IP 属地广东