单独测试一个方法?

时间:2018-03-22 17:11:21

标签: java junit

我有一个应用程序,它接受用户输入,解析它然后继续运行。我想写一些单元测试,以确保输入代码正常工作。现在的问题是执行流程。在我的测试方法中,我将一些输入写入输入流,然后我的程序读取它并继续执行某些操作。现在我想在给出之后但在程序继续执行之前测试输入。让我演示一下:

private void getInput(){
    System.out.println("welcome, please enter a number);
    getInput();
    System.out.println("Thank you, now starting...")
    startSimulation();
}

现在在我的测试方法中,我必须输入10到流然后我想断言输出流包含"谢谢你,现在开始......"。我想编程停止在这里执行,所以它不会继续。这有可能吗?

1 个答案:

答案 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;它有效,我保证。您必须将代码设计为在其他组件之间松散耦合(在本例中为输入和输出方法)。

此代码根本不完美。这仅仅是为了这个例子。