2010-12-13 15 views
2

私はEventBusの実際のSimpleEventBus実装を覗いているいくつかの問題があります: 私は特定のイベントのハンドラでもあるアクティビティを持っています。このイベントはサービスによって発生します。mockitoを使ってGWT EventBusを嘲笑します

コード:

@Mock private AssetCellList view; 
    @Mock private AcceptsOneWidget panel; 
    @Mock private SelectionModel<Asset> selectionModel; 
    @Mock private HasData<Asset> cellList; 
    @Mock private AssetService service; 
    @Mock private Asset asset; 
    @Mock private List<Asset> list; 
    @Mock private AssetListDTOClientImpl assetDTO; 
    @Mock private AssetEvent event; 


    @Before 
    public void setUp() throws Exception { 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void test(){ 


     /*Some stubbing*/ 
     when(view.getSelectionModel()).thenReturn(selectionModel); 
     when(view.getList()).thenReturn(cellList); 
     when(assetDTO.getAssetList()).thenReturn(list); 
     when(assetDTO.getAssetList().get(anyInt())).thenReturn(asset); 
     when(event.getAssetDTO()).thenReturn(assetDTO); 


     /*Creatin the Real EventBus*/ 
     EventBus eventBus = new SimpleEventBus(); 

     /*Creating the activity */ 
     AssetListActivity activity = new AssetListActivity(eventBus, 
       view, 
       service); 

     /*Spying the eventBus*/ 
     EventBus eventBusSpy = spy(eventBus); 
     /*Spying the activity*/ 
     AssetListActivity activitySpy = spy(activity); 


     /*Starting the activity*/ 
     activity.start(panel); 

     /*verifying the service call -> OK */ 
     verify(service, times(1)).getAssets(anyInt()); 

     /*Simulating the service which eventually fires an event*/ 
     eventBus.fireEvent(event); 

     /*verifying that the eventBus really fires the event --> NO OK*/ 
     verify(eventBusSpy, times(1)).addHandler(eq(AssetEvent.TYPE),      isA(AssetEventHandler.class)); 

     /*later verifiction*/ 
     verify(activitySpy).onAssetsReceived(event); 

    } 

エラートレースは、第eventBusSpy検証中であると述べている:

Wanted but not invoked: 
simpleEventBus.addHandler(
    Event type, 
    isA(cat.ccma.testproject.client.events.AssetEventHandler) 
); 
-> at cat.ccma.testproject.client.AssetListTest.test(AssetListTest.java:87) 
Actually, there were zero interactions with this mock. 

はありがとうございました。

答えて

6

スパイしたインスタンスを後でスパイするのではなく、あなたのアクティビティに渡すべきではありませんか?

はあなたにもgetCount(GwtEvent.Type)メソッドを追加して、簡単なEventBusあるcom.google.gwt.event.shared.testing.CountingEventBusを(あなたがラップするEventBusインスタンスを渡さない限りSimpleEventBus新しいを使用しています)を使用することができます。 あなたはそうするでしょうassertEquals(1, countingEventBus.getCount(AssetEvent.TYPE));

+0

トーマスありがとうございます。あなたが指摘したように、私はバスのスパイのバージョンを渡さなかった。私はCountingEventBusのアドバンテージも取った。後の検証はどうでしょうか?このEventBus(火事とイベント)をjreでプレイすることはできますか?GwtTestを使用する必要はありますか? –

+0

"共有"サブパッケージのパッケージは、 "pure Java"と "GWT Java"の両方のコードで使用できます。それにはSimpleEventBusとCountingEventBusが含まれます。 –

+0

ok、多分私はそれが私の活動(後の検証を渡すことはできません)から受信を得ることができないので、発砲やイベントのような非同期的な行動にテストを行うことをもっと読む必要があります –

関連する問題