Требуется ли писать собственные сопоставители для этой ситуации с Mockito? - PullRequest
1 голос
/ 07 декабря 2010

У меня следующая ситуация ... Я хочу вызвать исключение при каждом вызове определенного метода. Мне все равно, что передается этому методу, я просто хочу вызвать исключение. Уловка в том, что этот метод принимает пользовательские классы в качестве параметров.

Единственный способ, которым я нашел это, - это следующее:

// Matches any Foo
TypeSafeMatcher<Foo> fooMatcher = new TypeSafeMatcher<Foo>() {
  @Override
  public Boolean matchesSafely(Foo foo) {
    return true;
  }

  // more overrides
}

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(fooMatcher);

Я попытался сделать следующее, но я получаю сообщение, похожее на «не могу преобразовать объект в Foo» ... что имеет смысл:

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(anyObject());

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 08 декабря 2010

вы пробовали isA matcher?

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod(isA(Foo.class));
2 голосов
/ 08 декабря 2010

Может быть достаточно приведения:

doThrow(new RuntimeException("dummy exception")).when(mockObj).someMethod((Foo)anyObject());
1 голос
/ 08 декабря 2010

Существует также doAnswer (), если вы хотите сделать что-то отличное от вызова исключения

doAnswer(new Answer() {
      public Object answer(InvocationOnMock invocation) {
          Object[] args = invocation.getArguments();
          Mock mock = invocation.getMock();
          return null;
      }})
  .when(mock).someMethod();
...