2008-11-30 1 views
0

Мне нужно активировать JButton ActionListener в JDialog, чтобы я мог выполнить некоторые модульные тесты с помощью JUnit.Как активировать внутренний код 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()); 
    } 
} 

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

ответ

5

AbstractButton.doClick

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

+0

Спасибо, я не могу найти методы, которые мне нужны ... – Hoffmann 2008-11-30 18:35:52

+0

Это не очевидный метод. – 2008-11-30 21:25:29

2

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

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(); 
Смежные вопросы