2013-06-26 1 views
0

Как показано ниже, я хочу, чтобы проверить mock.fireEvent() получить вызывается с конкретным событием (event2 здесь)Как совместить второй вызов на макет?

mock.fireEvent(event1); 

mock.fireEvent(event2); 

verify(mock).fireEvent(matcherToCheckTheFieldOfEvent2); 

Но получить ошибку, указывающую, что

verify(mock).fireEvent(matcherToCheckTheFieldOfEvent2); 

будет пытаться соответствовать первым вызывая

mock.fireEvent(argThat(event1)); 

Вопрос в том, как дать event2 получить соответствие?

Сличитель выглядит следующим образом:

private class IsEvent2 extends ArgumentMatcher<Event2> 
    { 
     @Override 
     public boolean matches(Object arg) 
     { 
       return ((Event2) arg).methodGotCalled(); 
     } 
    } 
+0

Не могли бы вы добавить точное сообщение об ошибке Вы получаете? Добавление большего количества тестового кода junit также поможет. – Alban

+0

Полный тестовый код довольно много, и основным идеалом является тип захваченного события Event1 и его нельзя отнести к Event2, и я добавляю код Matcher –

ответ

0

Это и старая нить, но я недавно попал в эту проблему и решить ее с помощью ArgumentCaptor, чтобы захватить список обожженных событий и утверждения ожидаемых событий присутствуют на список.

ArgumentCaptor<SomeEvent> argument = ArgumentCaptor.forClass(SomeEvent.class); 
verify(mock, times(2)).fire(argument.capture()); 

argument будет иметь список захваченных событий, и вы можете утверждать их по отдельности

assertThat(argument.getAllValues(), hasItems(
    new SomeEventMatcher(event1), 
    new SomeEventMatcher(event2) 
)); 

И сличитель выглядит следующим образом:

static class SomeEventMatcher extends ArgumentMatcher<SomeEvent> { 
    private SomeEvent expected; 

    public SomeEventMatcher(SomeEvent expected) { 
     this.expected = expected; 
    } 

    @Override 
    public boolean matches(Object argument) { 
     if (argument == null) { 
      return false; 
     } 
     else { 
      SomeEvent event = (SomeEvent) argument; 
      // the fields that you want to compare with the matcher 
      return new EqualsBuilder() 
        .append(expected.getField1(), event.getField1()) 
        .append(expected.getField2(), event.getField2()) 
        .build(); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^