#集成测试 #二进制 #输出流 #第二 #二进制 #副作用 #断言

second_law

二进制集成测试瑞士军刀,兼容Stainless

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 机器人学

MIT 许可证

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