内置集成测试是同时还是顺序运行?

时间:2015-06-04 09:23:58

标签: rust

我正在编写集成测试以使用数据库。在每次测试开始时,我清除存储并创建一些数据。

我希望我的测试按顺序运行,以确保我正在使用空数据库。但似乎集成测试是同时运行的,因为有时我会在清理数据库后获得现有文档。

我检查了数据库,发现在不同测试中创建的文档具有大致相同的创建时间,即使我为每个测试添加延迟(使用std::thread::sleep_ms(10000))。

您能说明如何运行集成测试吗?是否可以按顺序运行它们?

2 个答案:

答案 0 :(得分:16)

内置测试框架默认同时运行。它旨在为测试提供有用但简单的支持,满足许多需求,并且每个测试都可以测试/ 应该独立于其他测试。 (独立意味着它们可以并行运行。)

也就是说,它确实收听RUST_TEST_THREADS环境变量,例如RUST_TEST_THREADS=1 cargo test将在单个线程上运行测试。但是,如果您总是想要测试此功能,您可能会对不使用#[test]感兴趣,或者至少不是直接使用。

最灵活的方式是通过cargo对完全定义自己框架的测试的支持,通过Cargo.toml中的以下内容:

[[test]]
name = "foo"
harness = false

有了这个,cargo test将编译并运行tests/foo.rs作为二进制文件。这样可以确保对操作进行适当的排序/重置。

或者,像stainless这样的框架可能具有您需要的功能。 (我没有用它,所以我不确定。)

答案 1 :(得分:1)

环境变量的替代方法是--test-threads标志。将其设置为一个线程即可按顺序运行测试。

cargo test -- --test-threads 1