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