Java 我如何使用Junit测试这个简单的方法?

Java 我如何使用Junit测试这个简单的方法?,java,testing,junit,mockito,Java,Testing,Junit,Mockito,这是我要测试的代码: public class ValidateRegisterInputController { public boolean validateInputHandle(UserDataObject user1){ ValidateInput validateinput = new ValidateInput(); boolean check = true; if (!validateinput.validateUsername(user1.g

这是我要测试的代码:

public class ValidateRegisterInputController {

    public boolean validateInputHandle(UserDataObject user1){
    ValidateInput validateinput = new ValidateInput();
    boolean check = true;

    if (!validateinput.validateUsername(user1.getUsername())) {
        check = false;
        BanUserGUI bangui = new BanUserGUI();
        bangui.displayBanGUI();
    }

    return check;
   }
但是,当我尝试运行测试时,它会启动“bangui.displayBanGUI()”方法并转到控制台请求输入,这意味着测试永远不会正确完成运行。这是我目前的测试:

public class ValidateRegisterInputControllerTest {

    @Test
    public void testValidateRegisterInputControllervalidateInputHandleReturnsStringvalidWhenValidInputIsMade(){
    UserDataObject user1 = new UserDataObject(" ", "password1", "John", "Smith", 1);
    ValidateRegisterInputController controller = new ValidateRegisterInputController();

    assertTrue(controller.validateInputHandle(user1));

    }

}
所以基本上,如果我输入一个有效的用户名(例如,“John”),这个测试将通过,因为它不会显示GUI,只会返回check,这是真的

但是,如果我输入了一个无效的用户名,比如“”(只是空格),那么它应该返回false,但由于GUI启动,它不会返回false

我怎样才能阻止它启动GUI,而只是关闭方法。我原以为mockito可能会派上用场,但我只学会了它的理论,从未真正实现过它


提前谢谢

您应该将BanUserGUI构造注入到代码中。使用javax.inject.Provider。或者,您应该提取方法:

public class ValidateRegisterInputController {

    public boolean validateInputHandle(UserDataObject user1){
    ValidateInput validateinput = new ValidateInput();
    boolean check = true;

    if (!validateinput.validateUsername(user1.getUsername())) {
        check = false;
        BanUserGUI bangui = createBanUserGui();
        bangui.displayBanGUI();
    }

    return check;
   }

   BanUserGUI createBanUserGui()
   {
     return new BanUserGUI();
   }
}

之后,您可以简单地覆盖单元测试中的方法以返回mock,或者使用spy-to-mock方法调用。

如果您确实想测试GUI,为什么还要测试此方法?如果没有GUI,您基本上是在测试Java是否工作。另外,在我看来,反转布尔测试会使方法读起来更清晰,而且我不会使用临时变量。谢谢你的回答。如果我想测试在输入无效用户名时GUI是否会运行,有没有办法?