在junit测试中抑制JOptionPane.showInputDialog

在junit测试中抑制JOptionPane.showInputDialog,junit,Junit,我正在使用JOptionPane.showInputDialog调用我的代码。 当junit测试运行时,它会弹出窗口。 有没有办法抑制弹出窗口? 嘲笑它会有帮助吗? 请在这方面帮助我。我知道-这个问题很古老。但也许有些人也会有同样的问题 记住:这是你的代码,不是吗?因此,您可以轻松地从 public boolean myMethod() { String value = "NOTHING"; if(this.someCondition) { value = JOptionPan

我正在使用
JOptionPane.showInputDialog
调用我的代码。 当junit测试运行时,它会弹出窗口。 有没有办法抑制弹出窗口? 嘲笑它会有帮助吗?
请在这方面帮助我。

我知道-这个问题很古老。但也许有些人也会有同样的问题

记住:这是你的代码,不是吗?因此,您可以轻松地从

 public boolean myMethod() {
  String value = "NOTHING";
  if(this.someCondition) {
    value = JOptionPane.showInputDialog(...);
  }
  return "NOTHING".equals(value);
 }

完成后,您可以编写一个模拟JOptionPane实际调用的测试(示例使用语法)

全部完成-现在添加测试,模拟由于JOptionPane.showInputDialog()可能发生的所有有趣的事情(返回null,返回意外值…),只需添加测试用例和不同的值即可

when(toTest.getValueFromDialog()).thenReturn(...);
@Test
public void test_myMethod() {
    MyClass toTest = mock(MyClass.class);

    //Call real method we want to test     
    when(toTest.myMethod()).doCallRealMethod();

    //Mock away JOptionPane
    when(toTest.getValueFromDialog()).thenReturn("HELLO JUNIT");

    //Perform actual test code
    assertFalse(toTest.myMethod());
}
when(toTest.getValueFromDialog()).thenReturn(...);