Как активировать JButton ActionListener внутри кода (в целях модульного тестирования)? - PullRequest
0 голосов
/ 30 ноября 2008

Мне нужно активировать JButton ActionListener внутри JDialog, чтобы я мог провести некоторое модульное тестирование с использованием JUnit.

В основном у меня есть это:

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

Это может показаться излишним для выполнения в модульном тесте, но фактический класс намного сложнее, чем это ...

Ответы [ 3 ]

5 голосов
/ 30 ноября 2008

AbstractButton.doClick

Ваши тесты могут выполняться быстрее, если вы используете форму, которая принимает аргумент и дает ему более короткую задержку. Вызов блокирует задержку.

2 голосов
/ 30 ноября 2008

Если у вас нетривиальный код непосредственно в обработчике событий, который требует модульного тестирования, вы можете рассмотреть возможность принятия MVC-шаблона и перемещения кода в контроллер. Затем вы можете выполнить модульное тестирование кода с помощью фиктивного представления, и вам вообще не нужно программно нажимать кнопку.

1 голос
/ 01 декабря 2008

Вы можете использовать отражение, чтобы получить кнопку во время выполнения и запустить событие.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...