1 个稳定版本
使用旧的 Rust 2015
1.0.4 | 2017年4月25日 |
---|
#9 in #卡伊卢亚
被 2 crate 使用
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::feature
在main
函数中设置标志。 -
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