7个版本
0.2.2 | 2023年10月16日 |
---|---|
0.2.1 | 2023年10月2日 |
0.1.3 | 2023年9月24日 |
288 在 测试 中排名
每月下载量 46
39KB
633 行
Extel - 扩展测试库
Extel是一个测试库,旨在帮助创建具有无状态测试的可伸缩测试套件。Extel的主要目的是使编写测试变得快速、简单和高效。Extel的一个常见用例是编写外部二进制/可执行文件的综合测试。Extel提供了一些宏来创建和解析命令结果,以简化创建和运行CLI命令的过程。
将Extel想象成测试的脚本语言。无需导入一系列古怪的模块,也不需要在shell语言中编写奇特的重新定向来捕获stdout。相反,您可以使用Extel保存您要运行的命令的输出或状态结果,并选择测试输出去向!
用法
Extel旨在在零参数或单个参数函数上运行(前者称为单测试,后者称为参数化测试)。创建您的测试函数后,您可以使用init_test_suite
宏进行注册。这将生成一个包含传入函数指针的结构的蓝图。在生成的结构上调用run
函数将立即执行所有测试并将结果收集到向量中,以便用户解析。
请注意,所有Extel测试函数都期望返回ExtelResult
。使用其他类型会导致生成测试套件的宏失败,或在使用parameters
进程宏时返回一些奇怪的错误。
use extel::prelude::*;
use extel_parameterized::parameters;
fn single_test() -> ExtelResult {
let mut my_cmd = cmd!("echo -n \"hello world\"");
let output = my_cmd.output()?;
let string_output = String::from_utf8(output.stdout)?;
extel_assert!(
string_output == *"hello world",
"expected 'hello world', got '{}'",
string_output
)
}
#[parameters(1, 2, -2, 4)]
fn param_test(x: i32) -> ExtelResult {
extel_assert!(x >= 0, "{} < 0", x)
}
fn main() {
init_test_suite!(ExtelDemo, single_test, param_test);
ExtelDemo::run(TestConfig::default());
}
Extel支持通过?
传播错误。如果您的自定义错误不支持From
特质,您可以使用err!
宏来帮助将错误映射到通用的TestFailed
变体。
fn cool_err_handling() -> ExtelResult {
let invalid_utf8 = *b"\xE0\x80\x80";
let utf8_check = String::from_utf8(invalid_utf8.into())?;
let io_check = std::fs::File::open("./file_not_found.txt")?;
let your_custom_err = get_custom_result().map_err(|e| err!("{}", e))?;
pass!()
}
依赖项
~0.3–0.8MB
~19K SLoC