2014-01-10 76 views
0

長描述: 在我們的gwt與mvp4g應用程序中,事件總線中有很複雜的事件流。像LOGIN這樣的事件會產生多個其他事件作爲演示者/處理者的反應。目前,我們在理解事件如何相互關聯,即哪些事件必須遵循這個特定事件方面遇到很大困難。
我們對演示者和視圖進行了測試,但我們缺少能夠清楚地顯示/建模事件流的測試,最好不使用真實視圖和服務。如何編寫用於跟蹤eventbus中事件流的測試?

簡短說明: 應該開發對eventBus(?)的新測試,它應該清楚地描述和測試事件流。

我有幾個路德的想法,但他們都聽起來並不理想:

  1. 寫自定義實現mvp4g eventbus的(可能是醜陋的)和:

    • 使用真正的主持人
    • 使用模擬(?)的意見
    • 模擬服務
    • 驗證所有產生的服務電話
    • 爲什麼不冷卻(a)在這種情況下,測試不會直接驗證生成的事件,而只會驗證具有服務的生成事件。 (B) EventBus實施將看起來相當斯卡里 - 它必須建立與嘲笑和欣賞
  2. 每位出席找到一種方法,使用一些魔法mvp4g機制,測試和模擬搶答創建eventBus,服務。

    • 爲什麼不冷靜:同分組 - 只能通過服務間接驗證是可能的,我無法找到如何手動創建eventBus和解決GIN,除GWT模塊依賴等所有問題。我想沒有簡單的方法來做到這一點。

是否有在測試中跟蹤事件樹的問題,任何通用的解決方案?猜猜我不是第一個盯着複雜的事件總線事件流的人。

回答

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


} 
+0

我們正在討論mvp4g事件總線,它與原生GWT事件總線完全不同。記錄ired事件已經實施。使用@Debug記錄觸發和消耗的事件。 –