web-dev-qa-db-fra.com

Mockito. Vérifiez que le paramètre de méthode est une classe particulière

J'ai une méthode:

void putObject(<T extends BaseEntity> param)

Avoir un test où je moque cette méthode, mais je me demande, comment vérifier que cette méthode a été appelée avec un paramètre de classe particulière? J'ai essayé de le faire de cette manière:

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

Fonctionne uniquement avec la deuxième variante avec any(), mais pas le paramètre t check class of`. Donc, s'il est possible de vérifier que cette méthode obtient un objet d'une classe particulière?

33
sphinks

User Matcher documentation isA () method.

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

Cela va résoudre ton problème.

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

68
TheWhiteRabbit

En fait, vous pouvez vérifier avec ArgumentCaptor.

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

SomeClass instance = parameterCaptor.getValue();
// check intance.getX()
// check instance.getY()
5
utkusonmez