JUnit 测试控制台输入应用程序
JUnit Testing Console Input Application
我正在尝试使用 JUnit 测试一个 java 应用程序,该应用程序从控制台获取输入以在程序中做出选择。下面是我要测试的程序片段。
PS:我是 JUnit 测试的新手,所以如果您能提供清晰简单的答案,我将不胜感激。
public void mainMenu(){
String input;
while (true){
System.out.println("1. view 2. Set-Up 3. Exit");
input = getInputFromConsole().trim();
switch (input.charAt(0)) {
case '1':
view();
break;
case '2':
setUp();
break;
case '3':
System.exit(0);
break;
}
}
我将如何创建一个输入为 eg 的测试用例。 “1”但输入是从控制台给出的?
您可以使用 System.in
从标准输入读取(可能是您的 "console")
如果您从 System.in
获得输入,那么为了测试您可以使用 System.setIn()
方法更改它。
缺少您的具体细节,这里是一个草图示例:
@Test
public void takeUserInput() {
InputStream in = new ByteArrayInputStream("1".getBytes());
System.setIn(in);
// instantiate and exercise your object under test
// assert something meaningful
}
但是,一般来说,我建议抽象掉从用户那里获取输入的细节。例如通过引入一些UserInput
接口。然后你可以将它注入你的 class under test。这将有助于拥有任何输入提供者:控制台、网络、数据库等。有了适当的界面,您将能够对任何用户输入进行存根。存根的好库是 Mockito.
我正在尝试使用 JUnit 测试一个 java 应用程序,该应用程序从控制台获取输入以在程序中做出选择。下面是我要测试的程序片段。
PS:我是 JUnit 测试的新手,所以如果您能提供清晰简单的答案,我将不胜感激。
public void mainMenu(){
String input;
while (true){
System.out.println("1. view 2. Set-Up 3. Exit");
input = getInputFromConsole().trim();
switch (input.charAt(0)) {
case '1':
view();
break;
case '2':
setUp();
break;
case '3':
System.exit(0);
break;
}
}
我将如何创建一个输入为 eg 的测试用例。 “1”但输入是从控制台给出的?
您可以使用 System.in
从标准输入读取(可能是您的 "console")
如果您从 System.in
获得输入,那么为了测试您可以使用 System.setIn()
方法更改它。
缺少您的具体细节,这里是一个草图示例:
@Test
public void takeUserInput() {
InputStream in = new ByteArrayInputStream("1".getBytes());
System.setIn(in);
// instantiate and exercise your object under test
// assert something meaningful
}
但是,一般来说,我建议抽象掉从用户那里获取输入的细节。例如通过引入一些UserInput
接口。然后你可以将它注入你的 class under test。这将有助于拥有任何输入提供者:控制台、网络、数据库等。有了适当的界面,您将能够对任何用户输入进行存根。存根的好库是 Mockito.