2.15-自定义测试框架
2 分钟阅读
译文 · 基于 Criterion.rs Documentation
自定义测试框架
原文链接: https://bheisler.github.io/criterion.rs/book/user_guide/custom_test_framework.html
Rust 编译器的 nightly 版本支持自定义测试框架。Criterion.rs 提供了自定义测试框架的实验性实现,这意味着你可以使用 #[criterion] 属性标记基准测试,而无需使用常规的 criterion_group! / criterion_main! 宏。目前这需要一些不稳定特性,但未来某个时候 criterion_group! / criterion_main! 将被弃用,#[criterion] 将成为定义 Criterion.rs 基准测试的标准方式。若想提前试用此功能,请参阅下文文档。
使用 #[criterion]
由于自定义测试框架仍不稳定,你需要使用较新的 nightly 编译器。安装后,在 Cargo.toml 中添加依赖:
| |
请注意,对于 #[criterion] 基准测试,我们不需要像常规 Criterion.rs 基准测试那样禁用正常测试 harness。
来看一个示例基准测试(注意此示例假设你使用 Rust 2018):
| |
首先要注意的是,我们启用 custom_test_framework 特性并声明使用 criterion::runner 作为测试运行器。我们还导入 criterion_macro::criterion,即 #[criterion] 宏本身。未来版本可能会从 criterion crate 重新导出以便从那里导入,但目前必须从 criterion_macro 导入。
之后我们定义老朋友斐波那契函数和基准测试。使用 #[criterion] 创建基准测试,只需将属性附加到接受 &mut Criterion 的函数上。要提供自定义 Criterion 对象(覆盖默认设置等),可使用 #[criterion(<返回 criterion 对象的表达式>)]——这里我们调用 custom_criterion 函数。就这么简单!
请记住,除了构建在不稳定编译器特性之上,Criterion.rs 及其测试框架的 API 设计仍处于实验阶段。宏子 crate 会遵守 SemVer,但未来很可能会有破坏性变更。