首页 > 解决方案 > 如何在 bash 中测试程序?(功能测试)

问题描述

我用 C 语言编写了一个程序,该程序gcd返回我调用的最大公约数:

$ ./gcd 42 36
6

我可以使用以下方法测试这些输入:

#!/bin/bash 

[[ $(./a.out 42 36) == "6" ]] || exit 1
[[ $(./a.out 42 11) == "1" ]] || exit 1

不幸的是,我没有任何总结,例如

ran 11 tests, 0 failures, 11 successful tests

是否有任何非常简单的模板/框架可以在程序级别进行此类测试(不是单元测试)?

标签: linuxbashtestingautomated-tests

解决方案


我会做以下事情(虽然有点破解,对吧?)

#!/bin/bash

declare -A messages
declare -A statuses

[[ 0 -eq 0 ]] && statuses["test_name_here"]=0 || {
    messages["test_name_here"]="Failed to divide 1023/123";
    statuses["test_name_here"]=1
}
[[  0 -eq 1 ]] && statuses["test_name2_here"]=0 || {
    messages["test_name2_here"]="Failed to divide asd/123";
    statuses["test_name2_here"]=1
}

exit_code=0
pass=0
fail=0

# Iterate statuses by key!
for i in "${!statuses[@]}"
do
  echo -n "$i - "
  if [ ${statuses[$i]} -eq 0 ]; then
      echo "PASS"
      pass=$((pass + 1))
  else
      echo "FAIL message=${messages[$i]}"
      exit_code=1
      fail=$((fail + 1))
  fi
done

echo "Passed $pass, Failed $fail"
exit $exit_code

在这个脚本中,您可以运行您的测试、命名它们并跟踪它们的成功或失败。最后,我打印统计信息并使用正确的代码退出(如果任何测试失败!=0)。输出:

$ ~/tmp/test.sh
test_name_here - PASS
test_name2_here - FAIL message=Failed to divide asd/123
Passed 1, Failed 1

推荐阅读