31次发布
使用旧Rust 2015
0.1.12 | 2017年10月7日 |
---|---|
0.1.11 | 2017年3月22日 |
0.1.10 | 2016年11月25日 |
0.1.6 | 2016年7月7日 |
0.0.3 | 2014年11月19日 |
218 在 测试 中排名
687 每月下载量
在 少于 7 crates 中使用
34KB
404 行
Stainless
Stainless是一个轻量级、灵活、无偏见的测试框架。
请注意,Stainless目前需要Rust编译器的夜间版!
安装
在您的 Cargo.toml
文件中将stainless添加为依赖项
[dev-dependencies]
stainless = "*"
将以下行添加到您的 根模块 的顶部。该文件通常称为 src/main.rs
(用于可执行文件)和 src/lib.rs
(用于库)
#![feature(plugin)]
#![cfg_attr(test, plugin(stainless))]
这将在您使用 cargo test
运行测试时使不锈钢可用。当只使用库时,请确保使用 cargo test --lib
运行测试。
概述
Stainless 导出 describe!
语法扩展,允许您快速生成复杂的测试层次结构,并通过 before_each
和 after_each
减少样板代码。
Stainless 目前支持以下类型的子块
before_each
和after_each
it
、failing
和ignore
bench
- 嵌套
describe!
before_each
和 after_each
允许您将一组测试的常见初始化和清理操作组合到一个单独的块中,从而缩短您的测试。
it
生成使用 before_each
和 after_each
的测试。 failing
做同样的事情,但生成的测试被标记为 #[should_panic]
。它可选地接受一个参数,该参数与失败消息匹配。 ignore
等同于用 #[ignore]
标记测试,默认情况下禁用测试。
bench
允许您以相同的方式生成基准测试,尽管 before_each
和 after_each
块目前不会影响 bench
块。
嵌套 describe!
块允许您更好地将测试组织成小单元,并为您提供对 before_each
和 after_each
应用于何处进行细粒度控制。当然,包装 describe!
块的 before_each
和 after_each
块也会被执行。
这4种子块一起,比内置测试基础设施提供了更多的灵活性和控制。
示例
describe! stainless {
before_each {
// Start up a test.
let mut stainless = true;
}
it "makes organizing tests easy" {
// Do the test.
assert!(stainless);
}
after_each {
// End the test.
stainless = false;
}
bench "something simple" (bencher) {
bencher.iter(|| 2 * 2)
}
describe! nesting {
before_each {
let mut inner_stainless = true;
}
after_each {
inner_stainless = false;
}
it "makes it simple to categorize tests" {
// It even generates submodules!
assert_eq!(2, 2);
}
}
}
展开到(大致)
mod stainless {
#[test]
fn makes_organizing_tests_easy() {
let mut stainless = true;
assert!(stainless);
stainless = false;
}
#[bench]
fn something_simple(bencher: &mut test::Bencher) {
bencher.iter(|| 2 * 2)
}
mod nesting {
#[test]
fn makes_it_simple_to_categorize_tests() {
let mut stainless = true;
let mut inner_stainless = true;
assert_eq!(2, 2);
inner_stainless = false;
stainless = false;
}
}
}
导入模块
在此阶段,无法在 describe!
块内放置 use
语句。为了允许使用来自其他模块和crate的数据结构,每个 describe!
块都有一个无声的 pub use super::*;
。这样,您在包含的模块中 pub use
的所有内容都在您的测试中可用。
#[cfg(test)]
mod tests {
pub use std::collections::HashMap;
describe! stainless {
it "can use HashMap" {
let map = HashMap::new();
}
}
}
许可证
MIT。有关详细信息,请参阅 LICENSE 文件。
作者
请参阅 Cargo.toml 以获取作者完整列表。