关于Q/A:How to run a specific unit test in Rust?
当在一个混合了库和二进制文件的项目中使用所描述的解决方案cargo test path::to::some_test -- --exact
时,如何抑制输出中所有的“0 passed”噪声?
要演示该问题:我已经通过cargo new test-project --lib
创建了一个最小的测试项目。然后我创建了以下文件:
.
├── Cargo.toml
└── src
├── bin
│ ├── bar.rs
│ ├── baz.rs
│ └── foo.rs
└── lib.rs
lib.rs
包含:
#[cfg(test)]
mod tests {
#[test]
fn test_foo() {
assert!(true);
}
#[test]
fn test_bar() {
assert!(true);
}
}
这三个二进制文件都是fn main() {}
的伪文件。
当运行cargo test tests::test_foo -- --exact
时,我可以看到将单元测试过滤到特定的test_foo
,但是输出中充斥着来自二进制文件的“running 0 tests”:
Finished test [unoptimized + debuginfo] target(s) in 0.00s
Running unittests src/lib.rs (target/debug/deps/test_project-72d9bd396ce43ab9)
running 1 test
test tests::test_foo ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s
Running unittests src/bin/bar.rs (target/debug/deps/bar-1d7d5b4c3ec748b3)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/bin/baz.rs (target/debug/deps/baz-ebd229498f923881)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Running unittests src/bin/foo.rs (target/debug/deps/foo-f88dc03912c7d051)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
我的真实的项目是一个cargo workspace项目,有许多工作区成员,每个成员都包含各种实用程序二进制文件。由于上面演示的行为,运行特定的测试不是很有用:根据过滤器的匹配结果得到夹在~3屏幕页的“运行0测试”,我当我拼写错误的测试过滤器,我得到~3页的实际0测试匹配(当然,这很高兴通过!)--这很难区分。
有没有一种方法可以完全抑制不匹配模块的输出?
1条答案
按热度按时间ccgok5k51#
1.为了在过滤测试时减少噪音,传递一个Cargo目标选择选项(如果您在工作区中,则传递包选择),因此您只运行具有所需测试的目标,而不是所有目标。在这种情况下,您将使用
--lib
。(It目前Cargo不可能为您做这件事,因为Cargo不知道每个目标包含什么测试。)
1.为了减少噪音 * 一般 *,并保存一些构建时间,您可以对没有任何测试的目标禁用测试。对于每个这样的目标,将
test = false
添加到Cargo.toml
:当然,这样做有可能会忘记您已经写过这个配置,从而编写了无法运行的测试。