【发布时间】:2009-06-29 14:46:21
【问题描述】:
我继承了一个 shell 脚本应用程序,它是 kshell 脚本、awk 和 java 程序的组合。我已经为 java 部分编写了 JUnit 测试。
对于 kshell 脚本和 awk 程序是否有类似的好方法?
我曾考虑使用 JUnit 和 System.exec() 来调用脚本,但似乎应该有更好的方法。
【问题讨论】:
标签: shell awk automated-tests
我继承了一个 shell 脚本应用程序,它是 kshell 脚本、awk 和 java 程序的组合。我已经为 java 部分编写了 JUnit 测试。
对于 kshell 脚本和 awk 程序是否有类似的好方法?
我曾考虑使用 JUnit 和 System.exec() 来调用脚本,但似乎应该有更好的方法。
【问题讨论】:
标签: shell awk automated-tests
我找到了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”。
【讨论】:
yum 安装了shunit2。我怎么知道它安装在哪里? which 和 locate 都找不到。
这不是您问题的直接答案,但您可以考虑使用简单的 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...)和与之关联的命令。
【讨论】: