5.3 测试
2 分钟阅读
Rand 有许多单元测试,尽管这些测试并不全面或完美(欢迎改进)。我们倾向于为所有新功能编写测试。
第一行测试只需从相应目录运行 cargo test。由于 Rand 支持 no_std(仅 core)、core+alloc 和 std 环境,测试所有三种环境很重要(取决于所讨论代码适用的特性):
| |
使用其他特性标志进行测试也可能值得:
| |
请注意,这仅测试当前包(即从仓库顶层运行时测试主 Rand 库)。要测试其他库,请 cd 到其目录。
我们不建议使用 Cargo 的 --package 选项,因为它与 --feature 选项有令人惊讶的交互,且当构建树中存在同一包的多个版本时会失败。CI 改用 --manifest-path 来选择包;开发时,使用 cd 更简单。
编写测试
测试可以是 test 子模块中的单元测试、文档示例、示例应用(examples 目录)、集成测试(tests 目录)或基准测试(benches 目录)。
请注意,只有单元测试和集成测试预期在 no_std(仅 core)和 core+alloc 配置下通过。这是刻意的选择;示例代码只需针对常见情况(std)。
随机数生成器
测试代码通常需要某种 RNG 进行测试,但不需要任何特定的 RNG。在这种情况下,我们倾向于使用 ::test::rng,它简单、初始化快速且具有确定性:
| |
各种测试涉及可能为真但并非确定的属性。我们倾向于使此类测试具有确定性,以避免虚假失败。