0

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

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

我几乎没有什么鲁莽的想法,但它们听起来都不令人满意:

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

    • 使用真正的演示者
    • 使用模拟(?)视图
    • 模拟服务
    • 验证所有产生的服务调用
    • 为什么不酷(a)在这种情况下,测试不会直接验证产生的事件,而只会验证那些有服务的事件。(b) EventBus 实现看起来相当可怕——它必须为每个演示者创建模拟服务和视图
  2. 找到一种方法来使用一些神奇的 mvp4g 机制在测试和模拟 vie、服务中创建 eventBus。

    • 为什么不酷:与上一个相同 - 只能通过服务进行间接验证,我找不到如何手动创建 eventBus 并解决 GIN、GWT 模块间依赖关系等所有问题。我想没有简单的方法可以做到这一点。

在测试中跟踪事件树的问题有什么通用的解决方案吗?我猜我不是第一个关注复杂事件总线事件流的人。

4

1 回答 1

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


}
于 2014-05-02T13:36:11.120 回答