我正在尝试为编写here的GCD代码编写单元测试。我也在尝试为这个函数编写单元测试。测试是here
这是项目的目录结构:
ProgrammingRust $ tree
.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── src
│ ├── chapter1
│ │ ├── cmd_line_args.rs
│ │ └── gcd.rs
│ └── main.rs
├── target
│ ├── debug
│ │ ├──
└── tests
├── chapter1
└── gcd.rs
48 directories, 108 files
当我尝试运行测试时,我收到此错误:
error[E0432]: unresolved import `chapter1`
--> tests/gcd.rs:1:7
1 | use chapter1;
| ^^^^^^^^ no `chapter1` in the root
error[E0425]: cannot find function `gcd` in this scope
--> tests/gcd.rs:10:20
|
10 | assert_eq!(gcd(15, 14), 1);
| ^^^ not found in this scope
我想在src/chapter1/gcd.rs
tests/gcd.rs
访问gcd.rs
中的函数,但我不知道如何将函数tests
链接到ASPxGridView
文件夹中的测试。
答案 0 :(得分:0)
在Rust中,tests
目录下存在的测试就是所谓的“黑盒子”测试,并将测试过的crate视为extern
库。你想要的是
extern crate chapter1;
// ...
如果您想进行白盒测试(并且可以访问私有成员),请创建一个仅在#[cfg(test)]
下编译的模块,如下所示:
#[cfg(test)]
mod tests {
#[test]
fn test_foo() {
// may use any `use` declaration as if this were any
// other module
use super::Something;
}
}
您也可以像普通模块一样创建文件,并且只包装相应的mod
声明,如下所示:#[cfg(test)] mod tests;