在单独的文件中运行 Rust 测试

Mar*_*rio 5 testing unit-testing rust

我对 Rust 绝对是菜鸟,而且 Rust 书似乎没有涵盖我的单元测试的具体用例。

我正在为我的大学学位实施计算机语言基准游戏。为了保持一致,我决定每种语言和算法实现都应遵守以下目录结构:

root
|
|__ language_1
|   |
|   |__ algorithm_1
|   |   |
|   |   |__ algorithm_1          <-- The algorithm logic.
|   |   |
|   |   |__ algorithm_1_tests    <-- Tests.
|   |   |
|   |   |__ algorithm_1_run      <-- A `main` function to execute the algorithm logic.
|   |
|   |__ algorithm_2
|
|__ language_2
...
Run Code Online (Sandbox Code Playgroud)

我需要这种一致性,因为我稍后将编写一个 bash 脚本来遍历此目录树结构,并能够轻松编译(如果需要)并运行必要的文件。

我目前正在使用 Rust 编程语言学习和编写算法。我将算法创建为库文件,并有一个单独的文件来调用库文件并执行其中的函数。这很好用。

我的问题在于测试。我希望有一个包含所有测试的单独文件,导入原始算法逻辑文件,并调用(和断言)函数。

为了使这一点更清楚,我将提供一个我正在运行的模拟示例:

root
|
|__ rust
|   |
|   |__ algorithm
|   |   |
|   |   |__ algorithm.rs
|   |   |
|   |   |__ algorithm_tests.rs
|   |   |
|   |   |__ algorithm_run.rs
Run Code Online (Sandbox Code Playgroud)

algorithm.rs

fn is_even(a: u32) -> bool {
    return a % 2 == 0;
}
Run Code Online (Sandbox Code Playgroud)

algorithm_run.rs

mod algorithm;

fn main() {
    let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    for number in numbers {
        algorithm::is_even(number);
    }
Run Code Online (Sandbox Code Playgroud)

algorithm_tests.rs

mod algorithm;

#[test]
fn test_is_even_returns_true_for_even_numbers() {
    let even_numbers = [2, 4, 6, 8, 10]
    for number in even_numbers {
        assert_eq!(true, algorithm::is_even(number));
    }
}
Run Code Online (Sandbox Code Playgroud)

这是使用以下命令执行并运行的 $ rustc algorithm_run.rs -o algorithm && ./algorithm

我需要执行什么命令或修改才能运行测试?

kmd*_*eko 1

您可以--test使用测试工具进行编译:

$ rustc --test algorithm_tests.rs && ./algorithm_tests

running 1 test
test test_is_even_returns_true_for_even_numbers ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Run Code Online (Sandbox Code Playgroud)