我有以下代码定义了可以放置生成文件的路径:
fn gen_test_dir() -> tempdir::TempDir {
tempdir::TempDir::new_in(Path::new("/tmp"), "filesyncer-tests").unwrap()
}
此函数在tests/lib.rs
中定义,在该文件的测试中使用,我也想在位于src/lib.rs
的单元测试中使用它。
如果不将实用程序功能编译到非测试二进制文件中而不重复代码,是否可以实现这一点?
答案 0 :(得分:6)
我所做的是将我的单元测试与任何其他实用程序一起放入受#[cfg(test)]
保护的子模块中:
#[cfg(test)]
mod tests { // The contents could be a separate file if it helps organisation
// Not a test, but available to tests.
fn some_utility(s: String) -> u32 {
...
}
#[test]
fn test_foo() {
assert_eq!(...);
}
// more tests
}
答案 1 :(得分:0)
您可以从其他#[cfg(test)]
个模块中的#[cfg(test)]
个模块中进行导入,因此,例如,在main.rs
或其他某个模块中,您可以执行以下操作:
#[cfg(test)]
pub mod test_util {
pub fn return_two() -> usize { 2 }
}
,然后从项目中的其他任何地方:
#[cfg(test)]
mod test {
use crate::test_util::return_two;
#[test]
fn test_return_two() {
assert_eq!(return_two(), 2);
}
}