You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java GUI中如何通过JUnit5测试判断输入对话框是否被正常打开?

解决方案
  • 先修正代码执行顺序:MockedStatic的生效范围只限于try-with-resources代码块内部,你原来把按钮点击的逻辑写在块外,此时静态Mock已经被释放,根本捕获不到JOptionPane的方法调用,需要把按钮查找、点击的逻辑移入块内。
  • 直接通过MockedStatic对象的verify方法即可校验静态方法的调用情况,可搭配参数匹配器同时校验入参是否符合预期。

完整可运行的测试代码如下:

import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.times;
import org.mockito.MockedStatic;
import javax.swing.JOptionPane;

@Test
public void shouldShowInputDialogOnUpdateTextButtonClick() {
   try (MockedStatic<JOptionPane> jOptionPane = mockStatic(JOptionPane.class)) {
      // 查找按钮并触发点击
      updateTextButton = (JButton) TestUtils.getChildNamed(activity1, "updateTextButton");
      updateTextButton.doClick(); 

      // 校验showInputDialog被调用1次,且入参为指定的提示文本
      jOptionPane.verify(
          () -> JOptionPane.showInputDialog(eq("Enter a string.")),
          times(1)
      );
   }
}

补充说明

如果你不需要严格校验弹窗的提示文本,只需要确认方法被调用过,可以把eq("Enter a string.")替换为anyString()。
另外需要注意静态Mock能力需要依赖mockito-inline组件,不要只引入基础的mockito-core,对应Maven依赖配置参考:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.8.1</version> <!-- 替换为和你项目适配的Mockito版本 -->
    <scope>test</scope>
</dependency>

内容的提问来源于stack exchange,提问作者David Maranga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:54:02