0

我需要在 JDialog 中激活一个 JButton ActionListener,这样我就可以使用 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());
    }
}

在单元测试中这听起来可能是多余的,但实际的类比这要复杂得多......

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 回答
0

我为 JButton 创建了一个 getter 并使用了 doClick。例子:

@Test
@DisplayName("ActionListener test")
void testActionListener(){
    HelpWindow helpWindow = new HelpWindow("menu");

    assertDoesNotThrow(() -> helpWindow.getReturnButton().doClick());
}
于 2020-06-29T13:16:11.443 回答