测试编译代码以返回预期输出/错误的最佳方法

时间:2009-08-17 15:33:08

标签: bash testing comparison assertions

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

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

简化示例:

./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

2 个答案:

答案 0 :(得分:1)

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

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

例如,内容为testFoo.exec的文件0表示必须成功(或至少返回0),而testBar.exec将包含1

然后

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

答案 1 :(得分:0)

我自己的简单测试工具的工作原理如下:

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

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

  • 主测试脚本查找所有.test脚本并依次执行每个脚本,生成临时输出文件。这是不同的 good_results目录中的匹配文件以及报告的任何差异

Itv花了我大约半个小时的时间来写这个并让它运转起来,但事实证明它非常宝贵!