我正在尝试弄清楚如何测试驱动软件,该软件启动外部进程,将文件路径作为输入,并在对标准输出或某个文件进行长时间处理后写入输出?在这种情况下编写测试有什么共同的模式吗?在没有启动测试中的实际工具并检查结果的情况下,很难创建快速执行的测试来验证外部工具的正确使用。
发布于 2009-05-26 03:43:42
您可以对外部进程进行记忆(http://en.wikipedia.org/wiki/Memoization)。用Ruby语言编写一个包装器,计算输入文件的md5和,并将其与已知校验和数据库进行比较。如果匹配,则复制正确的输出;否则,正常调用该工具。
发布于 2009-05-26 04:21:12
一直测试到你的边界。在您的示例中,边界是为调用外部程序而构造的命令行(您可以通过猴子补丁捕获该程序)。如果您坚持使用该程序的stdout (或者通过读取文件来处理其结果),那就是另一个界限。测试是看你的程序是否能处理这个“输入”。
发布于 2009-05-26 05:17:36
90%的答案是模拟外部命令行工具,并验证是否在两者之间的分界面上向它们传递了正确的输入。这有助于保持测试套件的快速。此外,您不应该引入命令行工具,因为它们不是“您的测试代码”-它带来了单元测试失败的可能性,因为您的代码发生了更改,或者命令行实用程序中的某些行为发生了更改。
但你似乎在定义“正确的输入”时遇到了麻烦--在这种情况下,使用Memoization这样的优化(正如Dave建议的那样)可能会让你两全其美。
https://stackoverflow.com/questions/908831
复制相似问题