0

これは私がテストしたいコードです:

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 が表示されず、単純にチェックが返されるためです。これは true です。

ただし、「 」などの無効なユーザー名 (空白スペースのみ) を入力すると、false が返されるはずですが、GUI の起動が原因ではありません。

GUIの起動とメソッドの終了だけを停止するにはどうすればよいですか。私はmockitoが便利になるかもしれないと思っていましたが、理論を学んだだけで、実際に実装したことはありません!

前もって感謝します!

4

1 に答える 1

2

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();
   }
}

その後、単体テストでメソッドをオーバーライドして代わりにモックを返すか、スパイを使用してメソッド呼び出しをモックすることができます。

于 2013-08-03T12:32:09.810 に答える