#tap #results #protocols #anything #generate #format

无需 std testanything

以 Test Anything 协议 (TAP) 生成结果

12 个版本

0.4.2 2023年10月16日
0.4.0 2023年3月2日
0.3.2 2022年12月1日
0.3.1 2022年6月10日
0.1.1 2018年9月26日

#121 in 测试


4 个 Crates 中使用 (2 个直接使用)

Apache-2.0

22KB
387 代码行

TAP:Test Anything 协议

-> 作为 testanything Crates 存在于 crates.io。

这个 Rust 库提供了生成和输出 Test Anything 协议结果的功能。请访问 testanything.org 获取更多信息。

使用方法

请查看 examples 文件夹中的示例。

简单

1..2
ok 1 Panda Bamboo
not ok 2 Curry Noodle
# Tree
# Flower

仅使用 alloc (#[no_std])

要使用此 Crates 中的 alloc 在 #[no_std] 中,使用

testanything= {版本= "*",默认-功能= false,功能= ["alloc"] }

测试

cargo test

许可证

Apache 许可证版本 2.0


lib.rs:

Test Anything 协议 (TAP) 是一种用于表达测试结果的纯文本格式。自1987年发明以来,它被用来帮助测试 Perl。借助这个 Crates,这个非常有用的工具被带到了 Rust 中!

此 Crates 提供了生成和输出 TAP 流所需的机制。

有关可执行示例,请参阅 examples 目录。

示例

生成 TAP 流的第一种方法是 TapSuite 机制。当您正在迭代一个集合并将其映射到 TapTest 结果集合时,这会非常有用。我们提供了一个 TapSuiteBuilder 和一个 TapTestBuilder 来使这个过程尽可能完美。

看看这个 TapSuite

use testanything::tap_test_builder::TapTestBuilder;
use testanything::tap_suite_builder::TapSuiteBuilder;

use std::io;

// Build a failing test
let failing_tap_test = TapTestBuilder::new()
    .name("Example TAP test")
    .passed(false)
    .diagnostics(&vec!["This test failed because of X"])
    .finalize();

// Construct a test result suite
let tap_suite = TapSuiteBuilder::new()
    .name("Example TAP suite")
    .tests(vec![failing_tap_test])
    .finalize();

// Print TAP to standard output in one chunk
match tap_suite.print(io::stdout().lock()) {
    Ok(_) => {}
    Err(reason) => eprintln!("{}", reason),
}

第二种方法使用TapWriter工具,可以认为是直接方法。这种机制允许您从程序中的任何地方将半定制化的TAP流写入STDOUT。由于TAP规范要求将TAP输出到STDOUT,因此TapWriter在流接口上没有使用任何花哨的功能。

看看这个TapWriter

use testanything::tap_writer::TapWriter;

let writer = TapWriter::new("Example TAP stream");

// Write the plan out. This can come before or after the test results themselves.
writer.plan(1, 6);

// Give me the name as a diagnostic line
writer.name();

// Print out some test results
writer.ok(1, "Panda");
writer.ok(2, "Bamboo");
writer.ok(3, "Curry");
// This one failed, so explain why with a diagnostic line
writer.not_ok(4, "Noodle");
writer.diagnostic("The above test failed because of XYZ reason");
writer.ok(5, "Tree");

// Uh oh! something went horribly wrong and we need to stop before
// we print out the results from test 6!
writer.bail_out_with_message("Destabilized warp core! Can't continue!");

无运行时依赖

特性