8 个版本 (破坏性更新)
0.8.0 | 2023年7月20日 |
---|---|
0.7.0 | 2023年5月9日 |
0.6.0 | 2021年6月29日 |
0.5.0 | 2021年1月19日 |
0.1.0 | 2020年5月29日 |
#65 in 测试
78,639 每月下载量
在 5 crates 中使用
29KB
670 行
datadriven
datadriven 是 Andy Kimball 编写的 Go datadriven 库的 Rust 版本。
它是一个用于在 Rust 中编写 表格驱动测试 的工具,并支持重写。
用法
测试文件看起来像这样
eval
1 + 1
----
2
eval
这里是指令,用于描述正在运行的测试类型。1 + 1
是输入。----
是输入和输出之间的分隔符。2
是预期输出。
如果此文件位于相对于 crate 根目录的 tests/testdata
,则可以通过以下测试进行处理
use datadriven::walk;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn run() {
walk("tests/testdata", |f| {
f.run(|test_case| -> String {
// Do something with `s` and return it.
test_case.input.to_string()
// Can access the directive via `test_case.directive`.
})
});
}
}
传递给 walk
的闭包将为给定目录中的每个文件(或单个文件)进行评估,传递给 f.run
的闭包将为该文件中的每个测试用例进行评估。测试用例可以通过在 walk
闭包中闭包值来共享状态。
重写
如果设置了环境变量 REWRITE
,则所有结果都将重写以匹配预期。
运行特定测试
如果设置了环境变量 RUN
,则其值将追加到传递给 walk
的目录。
多行输出
如果测试用例的输出包含空行,则可以使用 ----
双重符号包围整个输出来表示。
render
foo\n\nbar
----
----
foo
bar
----
----
参数
可以将字符串作为指令行中的参数传递给测试。
render a=world
hello $a
----
hello world
可以从 TestCase
上的 args
字段访问参数。
它们实际上是字符串的
Vec
集合
render a=(one,two)
将包含这个向量
vec!["one".to_string(), "two".to_string()]
依赖关系
~0.3–0.9MB
~20K SLoC