2008-11-30 69 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(); 
相關問題