如何编写用于跟踪事件总线中的事件流的测试?

时间:2014-01-10 10:22:17

标签: gwt event-bus mvp4g

详细说明: 在我们的gwt with mvp4g app中,我们在eventbus中有非常复杂的事件流。作为演示者/处理者的反应,像LOGIN这样的一个事件会产生多个其他事件。目前,我们在理解事件如何相互关联,即哪些事件必须遵循这一特定事件方面遇到很大困难 我们对演示者和视图进行了测试,但是我们缺乏能够清楚地显示/模拟事件流的测试,最好不使用真实的视图和服务。

简短描述: 应该开发关于eventBus(?)的新测试,它应该清楚地描述和测试事件流。

我的想法很少,但听起来都不尽如人意:

  1. 编写mvp4g eventbus的自定义实现(可能很难看),并且:

    • 使用真正的演示者
    • 使用mock(?)views
    • 模拟服务
    • 验证所有生成的服务电话
    • 为什么不酷?(a)在这种情况下,测试不会直接验证生成的事件,只会验证具有服务的事件。的(b)中 EventBus实现看起来很麻烦 - 它必须使用模拟服务和视图创建每个演示者
  2. 找到一种方法来使用一些神奇的mvp4g机制在test和mock vies,services中创建eventBus。

    • 为什么不酷?:与prev相同 - 只能通过服务进行间接验证,我无法找到如何手动创建eventBus并解决GIN,GWT模块之间的所有相关问题等等。我想没有简单的方法可以做到。
  3. 在测试中跟踪事件树的问题是否有任何通用解决方案?猜猜我不是第一个盯着复杂的事件总线事件流的人。

1 个答案:

答案 0 :(得分:0)

您想测试eventBus吗?或者您想跟踪所有被解雇的事件? 如果您想跟踪您的活动,也许某种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);
    }


}