gpt4 book ai didi

java - 测试时如何在 JOptionPane 上自动单击确定?

转载 作者:行者123 更新时间:2023-11-28 20:23:47 26 4
gpt4 key购买 nike

在我的程序中,我正在测试一个按钮,单击该按钮会在应用程序中弹出一个 JOptionPane 窗口。

但是,当此窗口弹出时,它希望用户单击“确定”,这意味着除非手动关闭该窗口,否则测试无法继续。

我希望能够在该窗口出现在我的测试中时以编程方式关闭它,或者阻止这些 JOptionPane 窗口针对该测试弹出。

最佳答案

在这种情况下,我通常会做的是确保 UI 不会出现在我的测试中。只是为了用一些代码来说明这一点。假设对话框是在 Action

中的某处触发的
public class ActionWithUI extends AbstractAction{

@Override
public void actionPerformed( ActionEvent e ){
//... do some stuff
int result = JOptionPane.show... //show the dialog
//do some other stuff based on the result of the JOptionPane
}
}

然后我会重构我的代码,以便 JOptionPane 的显示在它自己的单独方法中。

public class ActionWithUI extends AbstractAction{

@Override
public void actionPerformed( ActionEvent e ){
//... do some stuff
int result = askUserForInput();
//do some other stuff based on the result of the JOptionPane
}

int askUserForInput(){
return JOptionPane.show...
}
}

现在在我的测试中,我可以测试该操作的自定义版本,我在其中覆盖了 askUserForInput 方法并只返回“确定”(或“取消”,...)选项。这将避免在我的测试中使用任何巧妙的技巧,并使我的代码保持可读性。

我有时使用的另一种方法不是直接调用 JOptionPane.show,而是确保我的类在其构造函数中接受委托(delegate)类来显示此类对话框。在我的测试中,我可以插入一个模拟而不是真实的类,并拦截对 UI 的调用。

当然,这两种方法实际上都不会测试 JOptionPane 是否正确显示。但鉴于这是一个 JDK 方法,我真的觉得没有必要测试它。而且我并不是在绕过一些业务逻辑。我刚刚摆脱了 JOptionPane.show 调用。

如果这些都不是一个选项,我通常使用附加到 DefaultKeyboardFocusManager 的监听器。当具有焦点的组件发生变化时,我会查看它是否是 JOptionPane(使用 Swing 层次结构)并处理它。结果证明效果很好,但仍然不是 100% 可靠。因此(当然对于新代码),我尝试坚持之前概述的两种方法之一

关于java - 测试时如何在 JOptionPane 上自动单击确定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com