在junit测试中取消JOptionPane.showInputDialog

时间:2012-10-30 14:58:21

标签: junit

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

1 个答案:

答案 0 :(得分:2)

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

请记住:这是您的代码,不是吗?所以你可以轻松地重构

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

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

protected getValueFromDialog() {
  return JOptionPane.showInputDialog(...)
}

这样做了,您可以编写一个模拟实际调用JOptionPane的测试(示例使用Mockito语法)

@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());
}

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

的不同值
when(toTest.getValueFromDialog()).thenReturn(...);