如何测试编译代码是否返回预期输出或按预期失败?
我已经制定了一个下面的工作示例,但它不容易扩展。每个额外的测试都需要额外的嵌套括号。当然我可以把它分成其他文件,但你对如何改进这个有什么建议吗?另外我打算在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
答案 0 :(得分:1)
我建议在这里开始寻找模式。例如,您可以使用文件名作为模式,然后创建一些编码预期结果的附加文件。
然后,您可以使用一个简单的脚本来运行命令并验证结果(而不是一次又一次地重复测试代码)。
例如,内容为testFoo.exec
的文件0
表示必须成功(或至少返回0),而testBar.exec
将包含1
。
textBaz.out
将包含预期的输出。你不需要多次调用testBaz;您可以在第一个调用中重定向输出,然后查看$?
以查看调用是否成功。如果是,则可以直接验证输出(无需再次启动命令)。
答案 1 :(得分:0)
我自己的简单测试工具的工作原理如下:
每个测试都由带有扩展名.test的bash脚本表示 - 这些都存在于同一目录中
当我创建测试时,我运行测试脚本并检查输出 小心地,如果看起来不错,它会进入一个名为good_results的目录,在一个与生成它的测试同名的文件中
主测试脚本查找所有.test脚本并依次执行每个脚本,生成临时输出文件。这是不同的 good_results目录中的匹配文件以及报告的任何差异
Itv花了我大约半个小时的时间来写这个并让它运转起来,但事实证明它非常宝贵!