linux - 如何在 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
是否有任何非常简单的模板/框架可以在程序级别进行此类测试(不是单元测试)?
解决方案
我会做以下事情(虽然有点破解,对吧?)
#!/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
推荐阅读
- r - 循环遍历数据表并更改满足特定条件的值
- python - 将 wtforms Fieldlist 与 Selectedfield 一起使用不会返回数据
- java - Ubuntu 上的 Java Schemagen 错误:严重:null
- parallel-processing - Julia 中 @distributed 宏下的混淆范围规则
- python - 如何在没有“sqlite3.OperationalError:接近“0”:语法错误”的情况下将列表列表插入数据库表
- node.js - 你如何使用 got node 模块和 node createWriteStream 来下载带有电子的图像?
- elasticsearch - Kibana:按时间范围划分列数据
- javascript - 是否可以根据当前路线设置变量?
- string - 我应该在代码中的哪里使用 ParseFloat 或 Number 函数来更改我的 geojson 数据?
- java - org.hibernate.exception.JDBCConnectionException db2