Gwt 如何在eventbus中编写跟踪事件流的测试?
详细描述: 在使用mvp4g的gwt应用程序中,eventbus中的事件流相当复杂。作为演示者/处理者的反应,一个事件(如登录)会产生多个其他事件。目前,我们很难理解事件是如何相互关联的,即哪些事件必须在这个特定事件之后发生。Gwt 如何在eventbus中编写跟踪事件流的测试?,gwt,event-bus,mvp4g,Gwt,Event Bus,Mvp4g,详细描述: 在使用mvp4g的gwt应用程序中,eventbus中的事件流相当复杂。作为演示者/处理者的反应,一个事件(如登录)会产生多个其他事件。目前,我们很难理解事件是如何相互关联的,即哪些事件必须在这个特定事件之后发生。 我们有针对演示者和视图的测试,但我们缺少能够清楚地显示/模拟事件流的测试,最好不使用真实视图和服务 简短描述: 应开发关于eventBus(?)的新测试,该测试应清楚地描述和测试事件流 我有一些rud想法,但听起来都不令人满意: 编写mvp4g eventbus的自定义实
我们有针对演示者和视图的测试,但我们缺少能够清楚地显示/模拟事件流的测试,最好不使用真实视图和服务 简短描述: 应开发关于eventBus(?)的新测试,该测试应清楚地描述和测试事件流 我有一些rud想法,但听起来都不令人满意:
- 使用真实的演示者
- 使用模拟(?)视图
- 模拟服务
- 验证所有生成的服务调用
- 为什么不冷静一下呢?:(a)在这种情况下,测试不会直接验证生成的事件,而只验证具有服务的事件(b) EventBus实现看起来相当可怕——它必须用模拟的服务和视图创建每个演示者
- 为什么不酷呢:与上一篇相同-只能通过服务进行间接验证,我无法找到如何手动创建eventBus并解决GIN、GWT模块间依赖关系等所有问题。我想没有简单的方法可以做到这一点
对于测试中跟踪事件树的问题,有没有通用的解决方案?我想我不是第一个关注复杂事件总线事件流的人。是否要测试事件总线?还是要跟踪所有已触发的事件? 如果你想跟踪你的事件,也许某种EventMonitor可以帮助你?实现所有必需的EventHandler并记录发生的每个事件的类。 像这样的?只需在测试开始之前实例化该类
import java.util.logging.Logger;
import com.google.gwt.event.shared.GwtEvent;
import com.google.web.bindery.event.shared.EventBus;
public class EventMonitor implements AEventHandler, BEventHandler /* , ... */{
private static int event_count = 1;
private final Logger logger = Logger.getLogger(this.getClass().getName());
public EventMonitor(EventBus eventBus) {
eventBus.addHandler(AEvent.getType(), this);
eventBus.addHandler(BEvent.getType(), this);
// [...]
}
private void logEvent(GwtEvent<?> event) {
logger.info(event_count + " useful information");
event_count++;
}
@Override
public void onAEvent(AEvent event) {
logEvent(event);
}
@Override
public void onBEvent(BEvent event) {
logEvent(event);
}
}
import java.util.logging.Logger;
导入com.google.gwt.event.shared.GwtEvent;
导入com.google.web.bindery.event.shared.EventBus;
公共类EventMonitor实现AEventHandler、BEventHandler/*、*/{
私有静态int事件计数=1;
私有最终记录器=Logger.getLogger(this.getClass().getName());
公共事件监视器(EventBus EventBus){
addHandler(AEvent.getType(),this);
addHandler(BEvent.getType(),this);
// [...]
}
私有无效日志事件(GwtEvent事件){
logger.info(事件计数+有用信息);
事件计数++;
}
@凌驾
公共事件(AEvent事件){
日志事件(事件);
}
@凌驾
BEvent上的公共作废(BEvent事件){
日志事件(事件);
}
}
我们讨论的是mvp4g事件总线,它与本机GWT事件总线完全不同。已实现ired事件的日志记录。使用@Debug记录激发和消耗的事件。