我继承了一个shell脚本应用程序,它是kshell脚本,awk和java程序的组合。我已经为java部分编写了JUnit测试。
有没有一种方法可以为kshell脚本和awk程序做类似的事情?
我曾考虑使用JUnit和System.exec()来调用脚本,但似乎应该有更好的方法。
答案 0 :(得分:3)
我找到shUnit2并尝试了。
使用试用shUnit
的结果进行更新shUnit按预期工作。脚本文件是使用定义的测试函数编写的,然后调用shUnit。
示例:
#!/bin/sh
testFileCreated()
{
TESTFILE=/tmp/testfile.txt
# some code that creates the $TESTFILE
assertTrue 'Test file missing' "[ -s '${TESTFILE}' ]"
}
# load shunit2
. /path/to/shUnit/shunit2-2.1.5/src/shell/shunit2
结果
Ran 1 test.
OK
如果文件不存在,'OK'将替换为'FAILED'。
答案 1 :(得分:0)
您可能想尝试Expect。它专为自动化交互式程序而设计。当然,Expect是在TCL之上编写的,TCL是一种令人讨厌的脚本语言。所以有Python(Pexpect)的接口,也许还有其他程序友好的语言。但是TCL / Expect有很多文档仍然有用。
答案 2 :(得分:0)
这不是您问题的直接答案,但您可以考虑使用简单的Makefile来运行具有不同参数的bash脚本。
例如,写下这样的东西:
cat >Makefile
test_all: test1 test2 test3
test1:
script1 -parameter1 -parameter2
test2: $(addprefix test2file_, $TESTFILES)
test2file_%:
script2 -filename $*
test3:
grep|awk|gawk|sed....
通过调用'make test_all',您将自动执行所有脚本,并且语法不是很难学习 - 您只需要定义规则名称(test1,test_all ...)以及与之关联的命令。