2012-02-25 50 views
0

我有一个简单的Java控制台应用程序,并想自动测试其输入/输出。输入总是只有一行,但输出有时不止一行。如何测试Java应用程序的输入和输出?

我该怎么做? (与Linux外壳/ Python的/ Eclipse中/ JAVA)

+1

你什么意思通过测试做?举个例子吧。 – 2012-02-25 18:58:55

+0

如果应用程序是你的,你可以(也就是,*应*)从逻辑的其余部分分离在main(),这样你就可以用类似的xUnit测试代码。 – 2012-02-25 19:13:56

回答

7

你可以在Linux中使用的管道。例如,运行您的问题,如下所示:

java myProgram <input_file> output_file 

这将运行myProgram和从input_file的feed输入。所有输出将被写入一个名为output_file的文件。

现在,创建另一个文件名为expected_file你应该handcreate指定您希望对一些输入精确的输出(具体而言,输入你在INPUT_FILE)。

然后你可以使用diff比较OUTPUT_FILE和expected_file:

diff output_file expected_file 

这将输出两个文件之间的差异。如果没有差异,则不会返回任何内容。具体而言,如果返回某些内容,程序无法正常工作(或者测试错误)。

的最后一步是将所有这些命令在一些脚本语言链接像Ruby(:))或击(:()。

这是做这类测试的最直接的方式。如果你需要编写更多的测试,考虑使用像junit这样的测试框架。

+2

您应该注意,管道的使用不是特定于Linux。在Windows和Mac OS X上也是如此。 – 2012-02-25 19:20:59

+0

绝对! :) – Oleksi 2012-02-25 20:13:51

1

在eclipse中,你可以使用运行配置设置来将你的控制台输出记录到一个物理文件中运行 - >运行配置 - >选择你的应用程序 - >去到共同标签 - >在“标准输入和输出”部分指定物理文件路径。

0

可以执行任何Unix下C ommand使用监视命令。 Watch命令将被执行,直到您通过CTRL + C终止它或终止进程。

$ watch -n 5 ls 

默认情况下,watch命令使用2秒的时间间隔,您可以使用-n选项更改它。

或者你可以写这样的功能在你的.bashrc(从here

function run() { 
    number=$1 
    shift 
    for i in {1..$number}; do 
     [email protected] 
    done 
} 

而且使用这样的

run 10 command