我正在为我的Swing组件创建Actions,但是,他们经常需要生成一个确认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
}
}
答案 0 :(得分: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
设置为模拟值。
答案 1 :(得分:0)
我会将对话框创建保持在actionPerformed中,并将以下处理逻辑移到单独的方法中,然后单独测试 该方法。对话创建正常,无需对其进行单元测试。