|
楼主 |
发表于 2024-6-26 22:31:52
|
显示全部楼层
2.3 编写与运行单元测试
Rust 语言内置了对测试的简单支持。为了测试 gcd 函数,可以在src/main.rs 的末尾添加下面这段代码:
- #[test]
- fn test_gcd() {
- assert_eq!(gcd(14, 15), 1);
- assert_eq!(gcd(2 * 3 * 5 * 11 * 17, 3 * 7 * 11 * 13 * 19), 3 * 11);
- }
复制代码 这里我们定义了一个名为 test_gcd 的函数,该函数会调用 gcd 并检查它是否返回了正确的值。此定义顶部的 #[test] 将 test_gcd 标记为“测试函数”,在正常编译时会跳过它,但如果用cargo test 命令运行我们的程序,则会自动包含并调用它。可以让测试函数分散在源代码树中,紧挨着它们所测试的代码,cargo test 会自动收集并运行它们。
#[test] 标记是属性(attribute)的示例之一。属性是一个开放式体系,可以用附加信息给函数和其他声明做标记,就像 C++ 和 C# 中的属性或 Java 中的注解(annotation)一样。属性可用于控制编译器警告和代码风格检查、有条件地包含代码(就像 C 和 C++ 中的 #ifdef 一样)、告诉 Rust 如何与其他语言编写的代码互动,等等。后面还会介绍更多的属性示例。
将 gcd 和 test_gcd 的定义添加到本章开头创建的 hello 包中,如果当前目录位于此包子树中的任意位置,可以用如下方式运行测试。
- $ cargo test
- Finished `test` profile [unoptimized + debuginfo] target(s) in 0.14s
- Running unittests src/main.rs (target/debug/deps/hello_rust-c6d8128556e6213b)
- running 1 test
- test test_gcd ... ok
- test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
复制代码 |
|