rin*_*nde 6 testing integration-testing rust
我试图弄清楚如何最好地在 Rust 中组织我的测试,但我遇到了以下问题。我有一个在模块中定义的测试实用程序 ( test_util),我希望能够在单元测试和集成测试中使用它。
test_util的定义src/lib.rs:
#[cfg(test)]
pub mod test_util {
pub fn test_helper() {}
}
Run Code Online (Sandbox Code Playgroud)
我可以从另一个模块中的单元测试访问我的辅助函数src/some_module.rs:
#[cfg(test)]
pub mod test {
use crate::test_util::test_helper;
#[test]
fn test_test_helper() {
test_helper();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用集成测试中的实用程序时,如下所示tests/integration_test.rs:
use my_project::test_util::test_helper;
#[test]
fn integration_test_test_helper() {
test_helper();
}
Run Code Online (Sandbox Code Playgroud)
我收到以下编译器消息:
8 | use my_project::test_util::test_helper;
| ^^^^^^^^^ could not find `test_util` in `my_project`
Run Code Online (Sandbox Code Playgroud)
是否有充分的理由为什么不允许从属于同一项目的集成测试中访问项目中的测试代码?我知道集成测试只能访问代码的公共部分,但我认为也允许访问单元测试代码的公共部分是有意义的。解决这个问题的方法是什么?
该功能仅在该testcrate上运行测试时启用。集成测试在板条箱外部运行,因此您无法访问 上的任何内容。test
在我的公司,我们有一个约定,将共享测试实用程序放在test_utils板条箱顶层的公共模块中。您可以将此模块置于您自己的功能后面,例如integration_test,您在运行这些测试时始终启用该功能,但我们目前不关心这一点。