簡體   English   中英

如何在swing彈出對話框中模擬按鈕單擊?

[英]How do simulate a button click in a swing pop up dialog?

我是Java的新手,我想為名稱驗證類編寫一個JUnit測試

我想測試以下代碼:

public boolean createNewUMLClassFromString(String className) {
    if(validate(className)){
              ....
    }
    return false;
}

private boolean validate(String userInput){
    /* check if it's empty  */
    if (userInput.equals("")){  
                    JOptionPane.showMessageDialog(null, "Class Name can't be empty");
        return false;
    }
            return true;
}

所以我寫了一個JUnit

public void emptyStringCheckerTest(){
    assertFalse("new class can not be empty", um.createNewUMLClassFromString("do"));

}

它有效,但在測試運行過程中,我需要每次都單擊彈出對話框。

那么有人可以告訴我如何在測試過程中模擬按鈕點擊,或者有更好的方法來編寫測試嗎? 謝謝?

要執行程序設計按鈕單擊,只需調用doClick()方法即可。 不過,我不知道如何將其插入到測試程序中。

查看java.awt.Robot ,以及增強它的abbot http://abbot.sourceforge.net/doc/overview.shtml這樣的庫。

重寫您的validate方法並將JOptionPane調用移動到您可以在單元測試中替換的單獨方法(例如,包可見方法)。

private boolean validate(String userInput){
    /* check if it's empty  */
    if (userInput.equals("")){  
        showCannotBeEmptyDialog();            
        return false;
    }
            return true;
}

void showCannotBeEmptyDialog(){
  JOptionPane.showMessageDialog(null, "Class Name can't be empty");
}

使包可見仍允許您在測試中覆蓋它(例如,不顯示UI),並且您仍然能夠斷言該方法是否實際被調用。

另一種選擇是將實例作為構造函數參數傳遞,該參數將負責向用戶顯示消息。 在您的生產代碼中,此實例將使用JOptionPane類,在測試中您只需使用虛擬對象。 但是,如果只是為了顯示一個對話框,這可能是過度的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM