1

我是 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"));

}

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

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

4

3 回答 3

2

查看java.awt.Robot, 和abbot http://abbot.sourceforge.net/doc/overview.shtml之类的库来增强它。

于 2013-03-24T10:42:16.850 回答
2

要执行编程按钮单击,只需调用该doClick()方法。不过,我不知道如何将其插入您的测试程序。

于 2013-03-24T10:39:57.373 回答
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该类,而在您的测试中,您只需使用一个虚拟对象。但是,如果它只是为了显示一个对话框,这可能是矫枉过正。

于 2013-03-24T12:30:49.983 回答