【问题标题】:GWT and Mock the view in MVP patternGWT 和 Mock MVP 模式中的视图
【发布时间】:2010-06-07 04:53:23
【问题描述】:

我不知道问题是否已经提出,但我找不到它...我正在寻找一种方法来模拟我的视图以测试我的演示者?我尝试将 mockito 用于视图,并将其设置在演示者中,但结果是演示者,当我调用 presenter.getDisplay() (视图的获取器)时,我的所有小部件都是 null 吗?因为我相信这是正常的 mockito 不会模拟小部件。

我 100% 确定我弄错了什么,但我找不到。

感谢您的启发:)

【问题讨论】:

  • 最好为一个非常简单的测试用例贴一些代码。
  • 大家好,我们终于找到了测试演示者的方法。我们将每个小部件包装在一个类中,并使用接口,例如:`public class TextAreaWrapper extends WidgetWrapper

标签: gwt junit mockito


【解决方案1】:

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

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");
    }
}

当然,通常您的 Presenter 不会在您的测试用例中。

【讨论】:

    【解决方案2】:

    使用 MVP Presenter 依赖于 View 类 (Display),通过 gwt 接口,例如 HasValueHasHTMLHasClickHandlers 等,必要时还可能使用新接口。 Presenter 类应该直接使用这些接口而不是小部件类。因此,模拟视图接口相当简单,应该在测试方法之间共享(使用setUp@Before)。这还应该包括模拟 GWT 基础设施,例如 EventBus 等。

    有关 EasyMock 示例的精彩博客(转换为 mockito 简单但不直接)请参阅 here

    【讨论】:

      【解决方案3】:

      您需要确保在调用 getDislay() 时告诉 mockito 返回模拟视图。

      喜欢 when(presenter.getDisplay()).thenReturn(mockView);

      【讨论】:

      • 确实,但我应该将每个小部件一个一个地模拟到视图中吗?模拟每个小部件模拟视图并告诉 mockito 在询问时返回小部件?
      • 您的视图不应返回小部件——它应该具有对小部件执行某些操作的方法(例如显示/隐藏、在标签中设置字符串、从输入中获取字符串),但您的 Presenter应该知道 Display 包含小部件
      • 当你使用 mock(yourClass.class) 你会得到一个不知道怎么做的对象的引用。你需要告诉 mockito 在调用每个方法后你期望发生什么。
      • 还有一件事——tdavies 是对的——你的演示者不应该对小部件做任何事情。 View 是应该操作小部件的对象。您只需调用视图对象上的方法(例如 (myView.show())),然后视图对象处理操作小部件。
      • 我似乎误解了你的问题。不,您不应该模拟每个小部件。你唯一应该模拟的是视图。然后你告诉 mockito 当视图对象中的某个方法被调用时你期望发生什么。这样,您的测试将完全独立于视图实现。您将能够替换视图(例如,您决定要使用其他库中的其他窗口)实现并且仍然使测试有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2023-04-09
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多