如何在swing弹出对话框中模拟按钮单击?

时间:2013-03-24 10:36:18

标签: java swing junit

我是Java的新手,我想为名称验证类

编写一个JUnit测试

我想测试以下代码:

public boolean createNewUMLClassFromString(String className) {
    if(validate(className)){
              ....
    }
    return false;
}

private boolean validate(String userInput){
    /* check if it's empty  */
    if (userInput.equals("")){  
                    JOptionPane.showMessageDialog(null, "Class Name can't be empty");
        return false;
    }
            return true;
}

所以我写了一个JUnit

public void emptyStringCheckerTest(){
    assertFalse("new class can not be empty", um.createNewUMLClassFromString("do"));

}

它可以工作,但在测试运行过程中,我需要每次都单击弹出对话框。

那么有人可以告诉我如何在测试过程中模拟按钮点击,还是有更好的方法来编写测试?感谢?

3 个答案:

答案 0 :(得分:2)

要执行程序化按钮单击,只需调用doClick()方法即可。不过,我不知道如何将其插入到测试程序中。

答案 1 :(得分:2)

查看java.awt.Robot,以及abbot http://abbot.sourceforge.net/doc/overview.shtml等强化它的图书馆。

答案 2 :(得分:0)

重写您的validate方法并将JOptionPane调用移至您可以在单元测试中替换的单独方法(例如,包可见方法)。

private boolean validate(String userInput){
    /* check if it's empty  */
    if (userInput.equals("")){  
        showCannotBeEmptyDialog();            
        return false;
    }
            return true;
}

void showCannotBeEmptyDialog(){
  JOptionPane.showMessageDialog(null, "Class Name can't be empty");
}

使包可见仍允许您在测试中覆盖它(例如,不显示UI),并且您仍然能够断言该方法是否实际被调用。

另一种选择是将实例作为构造函数参数传递,该参数负责向用户显示消息。在您的生产代码中,此实例将使用JOptionPane类,在测试中您只需使用虚拟对象。但是,如果只是为了显示一个对话框,这可能会有点过分。