基于测试控制台的应用程序/程序 - Java

nam*_*ked 13 java junit command-line

所有,

我用Java编写了一个基于命令行的PhoneBook应用程序.该应用程序基本上要求用户的一些细节,如姓名,年龄,地址和电话号码,并将它们存储在一个文件中.其他操作包括按名称,电话号码等查找电话簿.所有细节都通过控制台输入.

我想写的JUnit测试案例为每一个我已经实现,但不能的功能,以弄清楚如何重定向System.in的实现代码在我将提供这些值JUnit测试方法的东西时,我实际的代码将停止对用户输入?

例:

我的实现代码有:

BufferedReader is = new BufferedReader (new InputStreamReader(System.in));
System.out.println("Please enter your name:");
String name = is.readLine();             // My test cases stop at this line. How can I pass command line values i.e. redirect System.in to my test based values?
Run Code Online (Sandbox Code Playgroud)

希望它有意义

oxb*_*kes 11

为什么不写你的应用程序Reader作为输入?这样,您可以轻松地替换InputStreamReader(System.in)aFileReader(testFile)

public class Processor {
    void processInput(Reader r){ ... }
}
Run Code Online (Sandbox Code Playgroud)

然后是两个实例:

Processor live = new Processor(new InputStreamReader(System.in));
Processor test = new Processor(new FileReader("C:/tmp/tests.txt");
Run Code Online (Sandbox Code Playgroud)

习惯于对界面进行编码将为您的程序的几乎每个方面带来巨大的好处!

另请注意,a Reader是在Java程序中处理基于字符的输入惯用方法.InputStreams应保留用于原始字节级处理.