2013-08-03 70 views
0

這是我想測試代碼:我如何使用Junit測試這個簡單的方法?

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

    } 

} 

所以基本上,如果我輸入有效的用戶名(例如,「約翰」),本次測試將通過,因爲它不會顯示GUI,並會簡單的返回檢查,這是真正。但是,如果我輸入一個無效的用戶名如「」(這只是空格),那麼它應該返回false,但它不會由於GUI啓動。

我該如何阻止它啓動GUI並完成該方法。我認爲mockito可能會派上用場,但我只是學會了它的理論,從未真正實現它!

在此先感謝!

+1

如果你想要測試GUI,爲什麼要麻煩測試這個方法?如果沒有GUI,你基本上是在測試Java是否工作。此外,顛倒布爾測試將使該方法讀得更乾淨,海事組織,我不會使用臨時變量。 –

+0

感謝您的回答。如果我想測試一下,如果我輸入一個無效的用戶名,圖形用戶界面將運行,是否有辦法做到這一點? – DeaIss

回答

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

它之後,你可以只是簡單覆蓋的方法在單元測試中,而不是返回模擬或使用間諜模擬方法調用。