不同目录中的功能单元测试给出错误

时间:2018-04-17 01:53:04

标签: rust rust-cargo

我正在尝试为编写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文件夹中的测试。

1 个答案:

答案 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;