2

我继承了一个 shell 脚本应用程序,它是 kshell 脚本、awk 和 java 程序的组合。我已经为 java 部分编写了 JUnit 测试。

有没有一种对 kshell 脚本和 awk 程序执行类似操作的好方法?

我考虑过使用 JUnit 和 System.exec() 来调用脚本,但似乎应该有更好的方法。

4

3 回答 3

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”。

于 2009-06-29T22:15:04.527 回答
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...)和与之关联的命令。

于 2009-07-27T12:37:54.303 回答
0

您可能想尝试Expect。它是为自动化交互式程序而设计的。当然,Expect 是在 TCL 之上编写的,这是一种可恶的脚本语言。所以有 Python ( Pexpect ) 的接口,也许还有其他对程序员更友好的语言。但是有很多关于 TCL/Expect 的文档仍然有用。

于 2009-07-22T23:05:18.103 回答