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

2022-09-04 00:41:40

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

我正在尝试为我已实现的每个功能编写 JUnit 测试用例,但无法弄清楚如何将实现代码重定向到我的 JUnit 测试方法中的某些内容,这些方法将在实际代码停止供用户输入时提供这些值?System.in

例:

我的实现代码有:

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?

希望它有意义


答案 1

为什么不编写应用程序以将 a 作为输入?这样,您可以轻松地将ReaderInputStreamReader(System.in)FileReader(testFile)

public class Processor {
    void processInput(Reader r){ ... }
}

然后是两个实例:

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

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

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


推荐