1 个稳定版本

使用旧的 Rust 2015

1.0.4 2017年4月25日

#9 in #卡伊卢亚


2 crate 使用

MIT/Apache

43KB
742

卡伊卢亚测试框架。

卡伊卢亚中的大多数集成测试由输入、预期输出和预期报告到 kailua_diag::Report 组成。这不能用单元测试轻松完成,因此这个库简化了为单个应用程序创建此类测试框架的过程。

可以将以下部分添加到其 Cargo.toml...

[[test]]
name = "integration-test"
harness = false

...并将以下内容放入相应的源文件。

extern crate kailua_env;
extern crate kailua_diag;
extern crate kailua_test;

use std::cell::RefCell;
use std::rc::Rc;
use std::collections::HashMap;
use kailua_env::{Source, Span};
use kailua_diag::Report;

struct Testing;
impl kailua_test::Testing for Testing {
    fn run(&self, source: Rc<RefCell<Source>>, span: Span,
           filespans: &HashMap<String, Span>, report: Rc<Report>) -> String {
        format!("Expected test output")
    }
}

fn main() {
    kailua_test::Tester::new("integration-test", Testing).scan("src/tests").done();
}

这将扫描 src/tests 中的所有 *.lua 文件,并根据命令行选项测试它们。可以向 Testing 添加更多方法以进一步自定义测试应用程序。

测试格式

this part is ignored, put some descriptions here.


--8<-- test-name-1 -- options options ...
--@v Error: this error should occur in the following line
local x = 'some testing code' --@< Note: this note should occur in this exact line
--@^ Warning: this warning should occur in the preceding line

--@v-vvv Fatal: this fatal error should span following three lines
do
    return
end

--! expected output here; long line can be concatenated \
--!     like this, where preceding whitespaces are ignored in this line.


-->8-- test-name-2
this test is ignored unless `-f` is given.


--8<-- test-name-3
local a = require 'x'

--& x
-- it is possible to use multiple input files.
return 42

--&
-- duplicate input file names are invalid, except for the empty file name.
-- this means that the preceding file (named or not) should be trimmed following whitespaces,
-- required by parser tests which tend to be sensitive to the final whitespaces.
-- the code block itself gets ignored.

关于报告格式的更多信息

  • 显式行也可以给出(--@3-8 ...);行号从1开始,并为每个代码块重新编号。

  • 行号也可以省略,在这种情况下,报告不应有任何相关的范围。

  • 除了 Kind::Info 之外的所有报告 Kind 都可以使用。通常,info 报告用于调试信息,因此不能被抑制或进行检查。

支持的测试选项

  • exact 表示测试不应该容忍额外的报告(通常仅在提供 -e 时启用)。

  • feature:FEATURE 仅在启用特定功能时启用测试。可以有多个功能选项,所有这些选项都需要启用测试。请注意,这与 Cargo 功能不同;您应该手动使用 Tester::featuremain 函数中设置标志。

  • feature:!FEATURE 仅当特定功能被禁用时才启用测试。

测试调用

cargo test (或如果你有多个测试二进制文件,cargo test --test NAME)将执行所有工作。如果发生任何错误,进程将退出。

测试二进制文件本身可以提供选项。请注意,这将与Cargo的选项冲突,因此它们原则上应该在--之后给出:cargo test -- --option-for-tester。由于这很麻烦,你也可以用加号替换前面的连字符:cargo test ++option-for-tester 将具有相同的效果,更容易运行。

支持选项

  • -v--verbose:即使测试通过,也显示所有测试输出。

  • ---exact-diags:存在额外报告时测试失败。这与将exact选项放入所有测试相同。

  • ---highlight-mismatch:突出显示报告或输出中的任何不匹配。

  • -LOCALE--message-locale LOCALE:让报告使用指定的区域设置。由于报告是按其本地化文本进行比较的,因此可能会失败大多数测试。

  • ---stop-on-panic:在第一个恐慌时停止。同时启用RUST_BACKTRACE=1

  • -:与-相同,但将启用RUST_BACKTRACE=full而不是。

  • ---force:运行显式忽略的(-->8--)测试。

  • -:与-相同,但还会运行被功能选项忽略的测试。

  • 实现可以通过添加Testing::augment_args方法来提供自己的选项。

剩余的参数(如果有),是用于筛选测试名称的正则表达式。

依赖关系

~4.5MB
~84K SLoC