Where should I put test utility functions in Rust?
What I do is put my unit tests with any other utilities into a submodule protected with #[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
}
You can import from your #[cfg(test)]
modules from other #[cfg(test)]
modules, so, for example, in main.rs
or in some other module, you can do something like:
#[cfg(test)]
pub mod test_util {
pub fn return_two() -> usize { 2 }
}
and then from anywhere else in your project:
#[cfg(test)]
mod test {
use crate::test_util::return_two;
#[test]
fn test_return_two() {
assert_eq!(return_two(), 2);
}
}