2013-02-08 3 views
19

У меня есть метод:Mockito. Проверьте метод параметров быть paticular класс

void putObject(<T extends BaseEntity> param) 

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

verify(foo).putObject((SomeClass)anyObject()); 
------ 
verify(foo).putObject(any(SomeClass.class)); 
------ 
ArgumentCaptor<SomeClass> parameter = ArgumentCaptor 
      .forClass(SomeClass.class); 
verify(foo).putObject(parametr); 

работает только второй вариант с any(), но это Безразлично t check class of parameter`. Итак, если можно проверить, что метод получает какой-либо объект определенного класса?

ответ

44

User Matcher documentationесть A() способ.

public static <T> T isA(java.lang.Class<T> clazz)

Это позволит решить вашу проблему.

verify(foo).putObject(any(),isA(SomeClass.class));

+2

Hi. Я хотел бы исправить код, указанный выше. Правильный вызов: verify (foo) .putObject (isA (SomeClass.class)); – nndru

1

На самом деле вы можете проверить с ArgumentCaptor.

ArgumentCaptor<SomeClass> parameterCaptor = ArgumentCaptor 
      .forClass(SomeClass.class); 
verify(foo).putObject(parameterCaptor.capture()); 

SomeClass instance = parameterCaptor.getValue(); 
// check intance.getX() 
// check instance.getY() 
Смежные вопросы