2013-02-08 11 views
19

Ho un metodo:Mockito. Verifica metodo param ad essere una classe paticular

void putObject(<T extends BaseEntity> param) 

avere qualche prova in cui mi prendo gioco di questo metodo, ma mi chiedo, come verificare che il metodo è stato chiamato con il parametro di particolare classe? Provato a farlo in questi modi:

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

funziona solo la seconda variante con any(), ma doesn t check class of parameter`. Quindi, se è possibile verificare che il metodo ottenga qualche oggetto di una particolare classe?

risposta

44

User Matcher documentationisA() metodo.

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

che risolverà il tuo problema.

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

+2

Ciao. Vorrei correggere il codice elencato sopra. L'invocazione corretta è: verify (foo) .putObject (isA (SomeClass.class)); – nndru

1

In realtà si può controllare con ArgumentCaptor.

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

SomeClass instance = parameterCaptor.getValue(); 
// check intance.getX() 
// check instance.getY() 
Problemi correlati