我有很多命令行实用程序,我们自己编写并经常使用.目前测试它们非常麻烦,因此我们没有像我们那样进行那么多的测试.
我想知道是否有人可以提出好的技巧或工具来做好这类事情.
这是UNIX
我建议构建命令行工具的代码,以便命令行实用程序是函数和/或类库的客户端.
库函数不是简单地使用std :: cout来打印输出,而是使用默认为std :: cout的ostream引用.在测试时,提供std :: stringstream来收集输出.
最后,使用您最喜欢的单元测试框架,简单地将实用程序的输出与预期结果进行比较.
(我为C++特定的例子道歉......我确信在其他语言中也有办法做类似的事情).
您可以使用Cram编写类似于交互式shell会话的测试.它具有灵活的测试规范格式,允许您使用Perl正则表达式或类似shell的通配符来匹配输出.Cram将重放测试中的命令,将输出与参考进行比较,并报告差异.
Aruba是一个Cucumber扩展,用于测试用任何编程语言编写的命令行应用程序.
要使用它,你需要ruby来运行测试,但是aruba的目的是提供一个预定义的步骤定义库,这样你就不需要编写任何ruby代码来创建一个可行的测试套件.(虽然在某些时候你可能会想要写一些ruby来做一些自定义步骤.)
您可以在这里看到使用aruba测试的命令行工具的复杂示例:jingweno/gh