我有一个应用程序,它接受用户输入,解析它然后继续运行。我想写一些单元测试,以确保输入代码正常工作。现在的问题是执行流程。在我的测试方法中,我将一些输入写入输入流,然后我的程序读取它并继续执行某些操作。现在我想在给出之后但在程序继续执行之前测试输入。让我演示一下:
private void getInput(){
System.out.println("welcome, please enter a number);
getInput();
System.out.println("Thank you, now starting...")
startSimulation();
}
现在在我的测试方法中,我必须输入10到流然后我想断言输出流包含"谢谢你,现在开始......"。我想编程停止在这里执行,所以它不会继续。这有可能吗?
答案 0 :(得分:1)
您的代码很难测试。你应该在方法中细分它。
public class YourClass {
public String getInput() {
//from standard input or whatever
}
public String getOutputFromInput(String input) {
//do your logic here
if ("10".equals(input)) {
return "Thank you, now starting...";
}
//else... or whatever
}
public void printOutput(String output) {
System.out.println(output);
}
}
现在,您可以测试您的方法:
@Test
public void theTest() {
String simulatedInput = "10";
YourClass classUnderTest = new YourClass();
assertEquals("Thank you, now starting...", classUnderTest.getOutputFromInput(simulatedInput));
}
在这里,您正在测试您的登录信息。您不必测试该System.out.pritln;它有效,我保证。您必须将代码设计为在其他组件之间松散耦合(在本例中为输入和输出方法)。
此代码根本不完美。这仅仅是为了这个例子。