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

标签 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

最佳答案

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

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

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

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

关于bash - 测试编译代码以返回预期输出/错误的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288620/

相关文章:

java - 单元测试还是验收测试?

java - Junit 一次测试中的多个结果

ruby - 更改 "case" block 使用的相等运算符 (Ruby)

python - 如何将多个变量从Python脚本传递到C shell脚本

linux - 如何在 Bash 子 shell 中执行 shell 脚本?

bash - 使用 kcov/shunit2 测量已执行 shell 脚本的代码覆盖率

java - 多个单词的字符串比较

perl - 将一个文件拆分成多个文件

c - 如何使用 setenv 为 bash 数组设置值

java - 如何比较 Fraction 和 int?