【发布时间】:2023-04-15 07:08:02
【问题描述】:
我的 GWT 应用程序遵循 MVP 模式,将单例 Display+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() 方法,我可以在其中传递代表Activity (ResettableEventBus) 创建的EventBus 实例。
public MyPresenter {
@Inject MyRequestFactory requestFactory;
public void start(EventBus eventBus) {
requestFactory.initialize(eventBus);
...
}
...
}
我认为让 GIN 创建和注入 MyRequestFactory 的新实例总是安全的。但是如果我想使用RequestFactorySource对MyPresenter进行单元测试,我宁愿需要初始化RequestFactory使用:
requestFactory.initialize(eventBus, new InProcessRequestTransport(processor));
问题来了。我可以在Singleton 范围内绑定MyRequestFactory(生成的实例是否保持任何状态?),并用我的单例EventBus 全局初始化它(它是否取决于Activity 的EventBus?) - 什么是后果?我假设注入到MyPresenter 的MyRequestFactory 实例已经为生产或测试初始化。另一种解决方案是在MyPresenter 中注入一些额外的RequestFactory 初始化策略,但有必要吗?
【问题讨论】:
标签: java unit-testing gwt junit requestfactory