如何从`src`导入函数进行测试?

tur*_*tle 11 rust

我一直试图了解如何导入函数以在 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 main.rs\n\xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 funcs\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mod.rs\n\xe2\x94\x82    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hello.rs\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_hello.rs\n
Run Code Online (Sandbox Code Playgroud)\n

src/funcs/mod.rs:

\n
pub mod hello;\n
Run Code Online (Sandbox Code Playgroud)\n

src/funcs/hello.rs:

\n
pub fn hello() {\n    println!("{}", "hello!");\n}\n
Run Code Online (Sandbox Code Playgroud)\n

src/main.rs:

\n
mod funcs;\n\nfn main() {\n    funcs::hello::hello(); // this works\n}\n
Run Code Online (Sandbox Code Playgroud)\n

src/tests/test_hello.rs

\n
mod funcs; // this import does not work!\n\n#[test]\nfn add() {\n    assert_eq!(2 + 2, 4);\n}\n\n#[test]\nfn hello_test() {\n    assert_eq!(funcs::hello::hello(), "hello");\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如何导入公共函数src以便它们可以在我的测试目录中使用?

\n

Aco*_*orn 8

创建一个src/lib.rs文件,将包的大部分逻辑放入库箱中,并funcs在那里导出模块:

pub mod funcs;
Run Code Online (Sandbox Code Playgroud)

现在,从您喜欢的任何地方使用该库(包含该模块)。就您而言,从src/main.rstests/test_hello.rs

use <crate>::funcs;
Run Code Online (Sandbox Code Playgroud)

替换<crate>为库包的名称,该名称与包名称和根文件夹相同。


Apl*_*123 0

Rust 将测试视为单独板条箱的一部分,因此您必须将use your_crate_name::funcs;测试的顶部放在测试的顶部,其中your_crate_name是 中定义的主包的板条箱名称Cargo.toml