测试

我们知道测试是任何软件不可缺少的一部分!Rust 对单元和集成测试提供一流的支持(参见《Rust 程序设计语言》中的关于测试的章节)。

通过上面链接的关于测试章节,我们看到了如何编写单元测试和集成测试。在代码目录组织上,我们可以将单元测试放在需要测试的模块中,并将集成测试放在源码中 tests/ 目录中:

  1. foo
  2. ├── Cargo.toml
  3. ├── src
  4. └── main.rs
  5. └── tests
  6. ├── my_test.rs
  7. └── my_other_test.rs

tests 目录下的每个文件都是一个单独的集成测试。

cargo 很自然地提供了一种便捷的方法来运行所有测试!

  1. cargo test

你将会看到像这样的输出:

  1. $ cargo test
  2. Compiling blah v0.1.0 (file:///nobackup/blah)
  3. Finished dev [unoptimized + debuginfo] target(s) in 0.89 secs
  4. Running target/debug/deps/blah-d3b32b97275ec472
  5. running 3 tests
  6. test test_bar ... ok
  7. test test_baz ... ok
  8. test test_foo_bar ... ok
  9. test test_foo ... ok
  10. test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

你还可以运行如下测试,其中名称匹配一个模式:

  1. cargo test test_foo
  1. $ cargo test test_foo
  2. Compiling blah v0.1.0 (file:///nobackup/blah)
  3. Finished dev [unoptimized + debuginfo] target(s) in 0.35 secs
  4. Running target/debug/deps/blah-d3b32b97275ec472
  5. running 2 tests
  6. test test_foo ... ok
  7. test test_foo_bar ... ok
  8. test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out

需要注意的一点是:cargo 可能同时进行多项测试,因此请确保它们不会相互竞争。例如,如果它们都输出到文件,则应该将它们写入不同的文件。