我一直试图了解如何导入函数以在 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)\nsrc/funcs/mod.rs
:
pub mod hello;\n
Run Code Online (Sandbox Code Playgroud)\nsrc/funcs/hello.rs
:
pub fn hello() {\n println!("{}", "hello!");\n}\n
Run Code Online (Sandbox Code Playgroud)\nsrc/main.rs
:
mod funcs;\n\nfn main() {\n funcs::hello::hello(); // this works\n}\n
Run Code Online (Sandbox Code Playgroud)\nsrc/tests/test_hello.rs
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
以便它们可以在我的测试目录中使用?
创建一个src/lib.rs
文件,将包的大部分逻辑放入库箱中,并funcs
在那里导出模块:
pub mod funcs;
Run Code Online (Sandbox Code Playgroud)
现在,从您喜欢的任何地方使用该库(包含该模块)。就您而言,从src/main.rs
和tests/test_hello.rs
:
use <crate>::funcs;
Run Code Online (Sandbox Code Playgroud)
替换<crate>
为库包的名称,该名称与包名称和根文件夹相同。
Rust 将测试视为单独板条箱的一部分,因此您必须将use your_crate_name::funcs;
测试的顶部放在测试的顶部,其中your_crate_name
是 中定义的主包的板条箱名称Cargo.toml
。
归档时间: |
|
查看次数: |
3767 次 |
最近记录: |