如何在不同的测试目录中使用 Rust 模块?

San*_*jay 5 rust

这是我的目录结构,

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 add.rs\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 add_test.rs\n
Run Code Online (Sandbox Code Playgroud)\n

add.rs

\n
pub fn add(a: u8, b: u8) -> u8 {\n  return a + b;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

main.rs

\n
pub mod add;\n\nfn main() {}\n
Run Code Online (Sandbox Code Playgroud)\n

add_test.rs

\n
#[cfg(test)]\nmod tests {\n  #[test]\n  fn add_test() {\n    // how do I use add.rs module?\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

add_test函数中如何测试 的add.rs函数add

\n

Ema*_*oun 5

请注意,您正在使用mod add;. 这不是公共模块,这意味着它在您的板条箱之外不可用。

要使其在包外可用(并因此在测试中可用),您可以将模块公开,或重新导出函数本身。此外,为此,您需要一个lib.rs文件来src放置导出:

// Make module public
pub mod add; 

// Make the function available at the root of the crate
pub use add::add; 

Run Code Online (Sandbox Code Playgroud)

然后,为了在测试中使用您的函数,您可以像为不同的 crate 调用函数一样调用它。假设你的箱子被命名为your-crate

// If your module is public
your-crate::add::add(2,3);

// If you reexport the function
your-crate::add(2,3);
Run Code Online (Sandbox Code Playgroud)

请参阅Rust 书中有关测试组织的章节了解更多详细信息。

  • 啊,您正在使用“main.rs”,这意味着您的板条箱是一个二进制板条箱。如果您另外创建一个“lib.rs”文件并以与现在在“main.rs”中所做的相同的方式导出模块,它应该可以工作。我会更新答案 (2认同)