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

5

我对Rust完全是个新手,而Rust书似乎没有涵盖我的单元测试特定用例。

我正在实现我大学学位的The Computer Language Benchmarks Game。为了保持一致性,我决定每种语言和算法实现都应该遵守以下目录结构:

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
...

我需要这种一致性,因为我将编写一个bash脚本来遍历此目录树结构,并能轻松地编译(如果需要)和运行必要文件。
我目前正在学习和使用Rust编程语言编写算法。我将算法创建为库文件,并有一个单独的文件调用库文件并执行其中的函数,这工作正常。
我的问题在于测试。我希望有一个单独的文件包含所有测试,导入原始算法逻辑文件,并调用(和断言)函数。
为了使这更清晰,我将提供一个模拟示例,以说明我正在运行的内容:
root
|
|__ rust
|   |
|   |__ algorithm
|   |   |
|   |   |__ algorithm.rs
|   |   |
|   |   |__ algorithm_tests.rs
|   |   |
|   |   |__ algorithm_run.rs

algorithm.rs

fn is_even(a: u32) -> bool {
    return a % 2 == 0;
}

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);
    }

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));
    }
}

使用以下命令来执行并运行该程序:

$ rustc algorithm_run.rs -o algorithm && ./algorithm

我需要进行哪些命令或修改才能运行测试呢?


5
如果您真的想学习Rust开发,我强烈建议您不要使用这种目录和运行/测试结构。典型的开发不直接调用rustc,而是使用cargo。它可以管理构建产物、构建配置文件、外部依赖、增量编译等等。如果您想让多种语言在脚本方面具有相同的行为,请使用makefile。 - kmdreko
我理解了 Rust 书中对 cargo new 命令和 src/* 结构的强调,但这是我为项目设定的要求,将来会更容易进行多语言测试,因此希望有一种一致的编译/运行方式。老实说,我还没有研究过 Makefile,因为我经验不足,但我会牢记在心! - Mario
2个回答

1

那实际上就是帮助我设置我的存储库的那个(给创建者发送了电子邮件,他们很友善地允许我访问该存储库)。尽管它是相当复杂的基础架构,但我会看看他们是如何做到的。我想Docker也会发挥作用,因为我能够运行他们的基准测试,即使我没有安装其中一半语言及其编译器。 - Mario

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

运行完美!这在官方文档中吗?我找不到。 - Mario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接