1

Swing コンポーネントのアクションを作成していますが、多くの場合、確認の JDialog を生成する必要があります。この JDialog をアクション自体の中で作成する必要がありますか、それをアクションに渡す必要がありますか、それとも別の方法がありますか?

public static class Create extends AbstractAction {
    @Override
    public void actionPerformed(ActionEvent event) {
        int selection = JOptionPane.showConfirmDialog(...);
        // ... processing
    }        
}

この例では、JDialog の選択を自動化する必要があるため (コードの匂いがします)、単体テストを行うのは非常に困難です。

解決?

public static class Create extends AbstractAction {

    private JDialog dialog = null;

    public Create(JDialog dialog) {
        this.dialog = dialog;
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        dialog.display();
        // ... processing
    }        
}
4

2 に答える 2

0

ダイアログの作成は actionPerformed に保持し、次の処理ロジックを別のメソッドに移動して、そのメソッドのみを単体テストします。ダイアログの作成は機能します。単体テストを行う必要はありません。

于 2013-02-07T21:27:41.003 に答える
0

ざっくりこんな感じでいかがでしょうか。

class Dialogs {
    public static Dialogs INSTANCE = new Dialogs();

    public int confirm(String message) {
        return JOptionPane.showConfirmDialog(null, message);
    }
}

次に、電話をかけるDialogs.INSTANCE.confirm()場所ならどこでも電話しますJOptionPane.showConfirmDialog()。テスト用Dialogs.INSTANCEに、モック値に設定します。

于 2013-02-07T20:43:08.617 に答える