0

JUnit を使用して単体テストを実行できるように、JDialog 内で JButton ActionListener をアクティブにする必要があります。

基本的に私はこれを持っています:

    public class MyDialog extends JDialog {
    public static int APPLY_OPTION= 1;
    protected int buttonpressed;
    protected JButton okButton;
    public MyDialog(Frame f) {
        super(f);
        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                buttonpressed= APPLY_OPTION;
            }
        } );
    public int getButtonPressed() {
        return buttonpressed;
    }

}

それから私は私のJUnitファイルを持っています:

public class testMyDialog {

    @Test
    public void testGetButtonPressed() {
        MyDialog fc= new MyDialog(null);
        fc.okButton.???????? //how do I activate the ActionListener?
        assertEquals(MyDialog.APPLY_OPTION, fc.getButtonPressed());
    }
}

これは単体テストで行うには冗長に聞こえるかもしれませんが、実際のクラスはそれよりもはるかに複雑です...

4

4 に答える 4

6

AbstractButton.doClick

引数を取り、より短い遅延を与えるフォームを使用すると、テストがより速く実行される可能性があります。コールは遅延のためにブロックされます。

于 2008-11-30T18:23:23.180 に答える
2

単体テストを必要とする重要なコードがイベント ハンドラーに直接含まれている場合は、MVC パターンを採用し、コードをコントローラーに移動することを検討してください。次に、モック ビューを使用してコードを単体テストできます。プログラムでボタンを押す必要はまったくありません。

于 2008-11-30T18:27:16.073 に答える
1

リフレクションを使用して実行時にボタンを取得し、イベントを発生させることができます。

JButton button = (JButton)PrivateAccessor.get(MyDialog , "okButton");
Thread t = new Thread(new Runnable() {
    public void run() {
        // What ever you want
    };
});

t.start();

button.doClick();

t.join();
于 2008-12-01T07:14:40.317 に答える