4 个版本 (2 个重大更改)
使用旧Rust 2015
0.3.1 | 2017年12月30日 |
---|---|
0.2.2 | 2016年9月27日 |
0.2.1 | 2016年8月22日 |
0.1.0 | 2016年8月14日 |
#106 in 机器人学
33KB
681 行
第二定律
"机器人必须服从人类给予它的命令,除非这些命令与第一定律相冲突。"
阿西莫夫机器人三大定律中的第二定律。
第二定律是你在二进制集成测试中调用二进制(而不是直接调用proccess::Command)以及对其输出流、退出码和文件系统副作用进行断言时应使用的。
第二定律提供了一种直观易懂的调用和断言语法,通过将所有必要的跨平台一致、可调试的二进制测试的样板代码移到后台,使你的测试的实际内容成为焦点。
易于阅读的测试
此集成测试的测试用例消息已被隐藏。你能总结出二进制需要做什么吗?
(此示例是可以在示例包中运行的Stainless测试之一,该包中还有一个等效的纯(非Stainless)测试)
#![feature(plugin)]
#![cfg_attr(test, plugin(stainless))]
#[macro_use]
extern crate second_law;
describe! <hidden> {
before_each {
let mut ucmd = new_scene!().ucmd();
}
it "should <hidden>" {
ucmd.arg("2").arg("3").succeeds().stdout_only("5");
}
it "should <hidden>" {
ucmd.arg("2").arg("0").succeeds().stdout_only("2");
}
it "should <hidden>" {
ucmd.succeeds().stdout_only("0");
}
it "should <hidden>" {
ucmd.arg("2").arg("three").fails().stderr_only("failure: could not parse argument 'three'");
}
}
无需样板代码的测试用例
- 在测试中内置了对测试用例的固定支持(测试用例的数据文件)。
无需样板代码的子命令支持
- 对子命令的一等支持
无需样板代码的一致性
- 默认情况下(但可选)清除环境和使用临时目录
- 提供一个面向对象的路径类,以在临时目录中启用文件系统操作。
- 可以在临时目录中运行多个命令。
无需样板代码的易于调试
- 如果您的测试用例包含多个动态调用,断言失败将显示失败的测试命令的确切内容。
常见问题解答
在哪里/如何使用它?
第二定律可以单独使用,也可以作为Stainless等测试框架和工具的补充。
设计目标
第二定律专注于支持以下用例
- Rust二进制
- 非GUI测试
- 最小交互性
依赖项
~365–550KB