1

我正在为我的 Swing 组件创建动作,但是,它们通常需要生成确认 JDialog。我应该在 Action 本身内创建这个 JDialog,我应该将它传递给 Action,还是有替代方法?

例子

public static class Create extends AbstractAction {
    @Override
    public void actionPerformed(ActionEvent event) {
        int selection = JOptionPane.showConfirmDialog(...);
        // ... processing
    }        
}

这个例子很难进行单元测试,因为它涉及自动选择 JDialog(感觉就像代码味道)。

解决方案?

public static class Create extends AbstractAction {

    private JDialog dialog = null;

    public Create(JDialog dialog) {
        this.dialog = dialog;
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        dialog.display();
        // ... processing
    }        
}
4

2 回答 2

0

大致像这样的东西怎么样:

class Dialogs {
    public static Dialogs INSTANCE = new Dialogs();

    public int confirm(String message) {
        return JOptionPane.showConfirmDialog(null, message);
    }
}

然后打电话Dialogs.INSTANCE.confirm()到你想打电话的任何地方JOptionPane.showConfirmDialog()。对于测试,设置Dialogs.INSTANCE为模拟值。

于 2013-02-07T20:43:08.617 回答
0

我会将对话框创建保留在 actionPerformed 中,并将以下处理逻辑移动到单独的方法中,然后对该方法进行单元测试。对话框创建工作正常,无需对其进行单元测试。

于 2013-02-07T21:27:41.003 回答