我是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"));
}
它可以工作,但在测试运行过程中,我需要每次都单击弹出对话框。
那么有人可以告诉我如何在测试过程中模拟按钮点击,还是有更好的方法来编写测试?感谢?
答案 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
类,在测试中您只需使用虚拟对象。但是,如果只是为了显示一个对话框,这可能会有点过分。