GWT和Mock在MVP模式

问题描述:

我不知道如果这个问题已经问,但我找不到它的看法......我在寻找一种方式来嘲笑我的观点,为了测试我的演讲?我尝试使用mockito作为视图,并将其设置在演示者中,但是在演示者结果中,当我调用presenter.getDisplay()(视图的getter)时,我的所有控件都为null?因为我相信这是正常的mockito不会嘲笑小部件。GWT和Mock在MVP模式

我敢100%肯定,我错了东西,但我不能找到它。

感谢您的近代启蒙:)

+0

最好为一个非常简单的测试用例发布一些代码。 – tgdavies 2010-06-07 05:10:17

+0

你好,我们终于找到了一种方法来测试演示者。我们总结在一个类中的每个部件,以及使用接口,如: '公共类TextAreaWrapper扩展WidgetWrapper

,你需要确保你告诉时的Mockito你打电话getDislay返回嘲笑视图()。

STH等 时(presenter.getDisplay())thenReturn(mockView)。

+0

的确,但是我应该将每个小部件一个一个地嘲笑到视图中吗? 模拟每个部件 嘲笑视图并告诉mockito返回部件时询问? – 2010-06-07 05:25:16

+0

你的观点不应该返回小部件 - 它应该有它做一些小部件的方法(例如显示/隐藏,设置在标签的字符串,得到一个输入一个字符串),但你的演示应该*不*知道当您使用mock(yourClass.class)时,显示包含小部件 – tgdavies 2010-06-07 07:07:47

+0

,您将获得对不知道任何事物的对象的引用。您需要告诉mockito在调用每种方法后您期望发生的事情。 – markovuksanovic 2010-06-07 07:58:16

这里是一个非常简单的工作示例:

import junit.framework.TestCase; 
import org.mockito.Mockito; 

public class SimpleGwtTest extends TestCase { 
    private static class UpperCasePresenter { 
     private final Display display; 

     public interface Display { 
      void setString(String s); 
     } 

     private UpperCasePresenter(String s, Display display) { 
      this.display = display; 
      display.setString(s.toUpperCase()); 
     } 
    } 

    public void testPresenter() { 
     UpperCasePresenter.Display d = Mockito.mock(UpperCasePresenter.Display.class); 
     new UpperCasePresenter("foo", d); 
     Mockito.verify(d).setString("FOO"); 
    } 
} 

当然通常你演示不会是你的测试用例中。

MVP Presenter依赖于View类(Display)通过gwt接口,如HasValue,HasHTML,HasClickHandlers等,并可能根据需要添加新接口。 Presenter类应直接使用这些接口而不是Widget类。因此Mocking View界面相当简单,应该跨测试方法共享(使用setUp@Before)。这也应该包括嘲笑GWT基础设施,如EventBus等。

对于带EasyMock示例的好博客(简单但不直接转换为mockito),请参见here