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 测试

Download history 9465/week @ 2024-03-14 10143/week @ 2024-03-21 8232/week @ 2024-03-28 10615/week @ 2024-04-04 9149/week @ 2024-04-11 14612/week @ 2024-04-18 17070/week @ 2024-04-25 15269/week @ 2024-05-02 17844/week @ 2024-05-09 19575/week @ 2024-05-16 20158/week @ 2024-05-23 23203/week @ 2024-05-30 19042/week @ 2024-06-06 17346/week @ 2024-06-13 20348/week @ 2024-06-20 17376/week @ 2024-06-27

78,639 每月下载量
5 crates 中使用

Apache-2.0

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