我有一个演示者类,它将生成一个新的演示者并在成功执行时查看。在产生下一个演示者/视图之前,一些业务逻辑执行我希望进行单元测试。我的问题是,当我的单元测试执行时,我无法避免出现实际的GUI窗口。
以下是一些用于演示此问题的伪代码:
// View1 and Model are interfaces
public Presenter1(View1 view, Model model) {
// ....
}
public void handleOKClick() {
// Method triggered by view
String data = view.getSomeUserInput();
// ... business logic I wish to test
if (shouldLoadNextView) {
// Business logic concluded the next view should be loaded
View2 nextView = new View2Impl();
Presenter2 nextPresenter = new Presenter2(nextView, model);
nextView.setPresenter(nextPresenter);
nextView.showView();
}
}
在我的单元测试中,我可以模拟传递给View1
构造函数的Model
和Presenter1
个实例。然后,我可以检查我的业务逻辑是否按预期与这些逻辑交互。我目前无法做的是阻止显示下一个视图,因为我的Presenter1
实例将构建View2
的具体实现并显示它。
我觉得我有三个选择:
改变班级的设计。也许Presenter1
构造函数应该将View2
实例作为参数,允许我为了测试而模拟它。
找到一种狡猾的方法,一旦它出现,就从我的单元测试代码中删除它。我不确定如何做到这一点。
对我的项目类设计进行更根本的更改,以便演示者不会以这种方式生成新视图。
答案 0 :(得分:1)
如果我是你,我会选择选项3,让你的主持人通过其他视图的事件进行交流,这样你就可以让它们松散耦合,演示者会变得更容易测试,更容易实现。
答案 1 :(得分:1)
时间过去了,我已经采用了选项1.当可能不需要时,预先构建视图会感到笨拙,但同样我的视图类也很轻巧,构建起来很便宜。