2008-11-30 41 views
0

我需要激活JDialog中的JButton ActionListener,所以我可以使用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并将代码移至控制器。然后,您可以使用模拟视图对代码进行单元测试,并且您根本不需要编程式地按下按钮。

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(); 
相关问题