您如何测试编译后的代码是返回预期输出还是按预期失败?
我已经在下面制定了一个工作示例,但它不容易扩展。每个额外的测试都需要额外的嵌套括号。当然我可以将它拆分成其他文件,但是你对如何改进它有什么建议吗?我还计划在 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
的文件testFoo.exec
意味着它必须成功(或者至少返回0)而testBar.exec
将包含 1
。
textBaz.out
将包含预期的输出。您不需要多次调用 testBaz;您可以在第一次调用时重定向输出,然后查看 $?
以查看调用是否成功。如果是,那么您可以直接验证输出(无需再次启动命令)。
关于bash - 测试编译代码以返回预期输出/错误的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288620/