1

您如何测试编译后的代码是否返回预期的输出或按预期失败?

我在下面制定了一个工作示例,但它不容易扩展。每个额外的测试都需要额外的嵌套括号。当然我可以把它拆分成其他文件,但是你对如何改进这个有什么建议吗?另外我打算在makefile中使用make test节中的这个,所以我不希望其他人安装默认情况下没有安装的东西,只是为了测试它。并且标准输出也应该与标准错误保持交错。

简化示例:

./testFoo || echo execution failed

./testBar && echo expected failure

(./testBaz && (./testBaz 2>&1 | cmp -s - foo.tst && ( ./testFoo && echo and so on 
     || echo testFoo's execution failed )|| echo testBaz's does not match   )
  || echo testBaz's execution failed

我当前的测试仪看起来像这样(对于一个测试):

\#!/bin/bash
compiler1 $1 && (compiler2 -E --make $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') && (./$(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') || echo execution failed)  || less $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/').err) || echo compile failed
4

2 回答 2

1

我建议从这里开始寻找模式。例如,您可以使用文件名作为模式,然后创建一些对预期结果进行编码的附加文件。

然后,您可以使用一个简单的脚本来运行命令并验证结果(而不是一次又一次地重复测试代码)。

例如,testFoo.exec具有内容的文件0意味着它必须成功(或至少返回 0),而testBar.exec将包含1.

textBaz.out然后将包含预期的输出。您无需多次调用 testBaz;您可以在第一次调用中重定向输出,然后查看$?调用是否成功。如果是这样,那么您可以直接验证输出(无需再次启动命令)。

于 2009-08-17T15:42:35.953 回答
0

我自己头脑简单的测试工具是这样工作的:

  • 每个测试都由一个扩展名为 .test 的 bash 脚本表示 - 这些都位于同一个目录中

  • 当我创建一个测试时,我运行测试脚本并仔细检查输出,如果它看起来不错,它会进入一个名为 good_results 的目录,在一个与生成它的测试同名的文件中

  • 主测试脚本查找所有 .test 脚本并依次执行每个脚本,生成一个临时输出文件。这与 good_results 目录中的匹配文件存在差异,并且报告了任何差异

Itv 花了我大约半个小时来写这篇文章并让它工作,但事实证明它是无价的!

于 2009-08-17T15:58:50.057 回答