GWT RequestFactory - 如何正确初始化它?

时间:2013-04-19 12:54:18

标签: java unit-testing gwt junit requestfactory

我的GWT应用程序遵循MVP模式,单EventBusDisplay + Presenter绑定在Activity(在GIN的帮助下):

public class MyActivity implements Activity {
  @Inject MyDisplay display; //usually bound in Singleton scope
  @Inject MyPresenter presenter;

  ...
  @Override
  public void start(AcceptsOneWidget panel, EventBus eventBus) {
    diplay.bindPresenter(presenter);
    presenter.start(eventBus);
    panel.setWidget(display);
  }
  ...
}

通常我会使用GIN将特定RequestFactory的新实例注入特定的Presenter。我的演示者使用了start()方法,我可以在其中传递代表EventBus创建的Activity实例(ResettableEventBus)。

public MyPresenter {

  @Inject MyRequestFactory requestFactory;

  public void start(EventBus eventBus) {
    requestFactory.initialize(eventBus);
    ...
  }
  ...
}

我认为让GIN创建并注入MyRequestFactory的新实例总是安全的。但是,如果我想使用MyPresenterRequestFactorySource进行单元测试,我宁愿使用以下内容初始化RequestFactory

requestFactory.initialize(eventBus, new InProcessRequestTransport(processor));

这就是问题所在。我可以在范围MyRequestFactory中绑定Singleton(生成的实例是否保留任何状态?),并使用我的单例EventBus进行全局初始化(它是否依赖于Activity EventBus?) - 后果是什么?我假设注入MyRequestFactory的{​​{1}}实例已初始化为生产或测试。另一种解决方案是在MyPresenter中注入一些额外的RequestFactory初始化策略,但是有必要吗?

1 个答案:

答案 0 :(得分:1)

RequestFactory 设计,可用作单身

假设您还有一个应用程序范围的事件总线,它的工作方式与您今天使用的相同:RequestFactory仅发布到事件总线,它不会监听事件。