издевательство над GWT EventBus с mockito

У меня есть некоторые проблемы со слежкой за реальной реализацией EventBus SimpleEventBus: у меня есть активность, которая также является обработчиком определенного события. Это событие запускается службой.

Код:

    @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.

Благодарю вас.


person ramon_salla    schedule 13.12.2010    source источник


Ответы (1)


Разве вы не должны передать шпионский экземпляр своей деятельности вместо того, чтобы шпионить за ним впоследствии?

Обратите внимание, что вы также можете использовать com.google.gwt.event.shared.testing.CountingEventBus, который представляет собой простой EventBus (использует новый SimpleEventBus, если вы не передаете экземпляр EventBus для переноса) с добавлением метода getCount(GwtEvent.Type). Затем вы бы сделали assertEquals(1, countingEventBus.getCount(AssetEvent.TYPE));

person Thomas Broyer    schedule 16.12.2010
comment
Спасибо, Томас. Как вы заметили, я не пропустил шпионскую версию автобуса. Я также воспользовался преимуществом CountingEventBus. Что уж говорить о более поздней проверке. Могу ли я играть с этим EventBus (огонь и событие) в jre или мне нужно использовать GwtTest? - person ramon_salla; 16.12.2010
comment
Все в общих подпакетах можно использовать как в чистом коде Java, так и в коде GWT Java. Сюда входят SimpleEventBus и CountingEventBus. - person Thomas Broyer; 17.12.2010
comment
хорошо, может быть, мне нужно больше узнать о тестировании асинхронных действий, таких как срабатывание и событие, потому что я не могу получить его из своей активности (не могу пройти более позднюю проверку) - person ramon_salla; 17.12.2010