1

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

}

動作しますが、テスト実行プロセスでは、毎回ポップアップ ダイアログをクリックする必要があります。

テストプロセスでボタンクリックをシミュレートする方法を誰か教えてもらえますか、またはテストを書くためのより良い方法はありますか? ありがとう?

4

3 に答える 3

2

プログラムによるボタン クリックを実行するには、単にdoClick()メソッドを呼び出します。ただし、それをテスト手順に挿入する方法がわかりません。

于 2013-03-24T10:39:57.373 に答える
2

と、それを強化するhttp://abbot.sourceforge.net/doc/overview.shtmljava.awt.Robotのようなライブラリを見てください。abbot

于 2013-03-24T10:42:16.850 に答える
0

メソッドを書き直して、単体テストで置き換えることができる別のメソッド (パッケージの可視メソッドなど) に呼び出しを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 を表示しないようにする)、そのメソッドが実際に呼び出されたかどうかをアサートすることもできます。

もう 1 つのオプションは、ユーザーにメッセージを表示する役割を担うコンストラクタ パラメータとしてインスタンスを渡すことです。本番コードでは、このインスタンスはJOptionPaneクラスを使用しますが、テストでは単にダミーを使用します。ただし、1 つのダイアログを表示するだけの場合、これはやり過ぎかもしれません。

于 2013-03-24T12:30:49.983 に答える