我有下面的代码
if (MessageBoxProvider.questionMessageBox(shell, title, message)) {
return performOverwrite(file);
}
我想测试(JUnit)调用了performOverwrite(file)方法多少次,我知道我可以使用verify方法进行测试,我的问题是
MessageBoxProvider.questionMessageBox(shell, title, message)
,只有当用户单击确定时条件才变为true,但是使用Junits,如何我使if
条件成立吗? 最佳答案
如果将用户界面代码混入其中,则单元测试业务逻辑将变得非常复杂。理想情况下,您应该采用一种设计模式,例如MVC或MVP,可以完全避免这种情况。
如果您不能或不会沿着那条路线走,请考虑定义一个包含所有消息框方法的接口。例如。
public interface MessagePrompter {
boolean poseQuestion(title, message);
// ...
}
在您的类构造函数中,接受此类型的对象并将其存储。在测试中,您可以模拟该对象并使用它来控制测试用户的操作。
在生产代码中,使用此接口的具体实现来调用
MessageBoxProvider
方法。这种方法的好处是使您的应用程序更具可移植性。如果要发布命令行版本或基于Web的版本,只需更改具体实现的行为方式即可。