Mockito ArgumentMatcher disant Arguments sont Différents
Je suis à l'aide de Mockito pour les tests Unitaires et je suis en utilisant ArgumentMatcher pour vérifier si un domaine particulier d'un argument a une valeur particulière.
J'ai un StatusMatcher classe qui étend la classe ArgumentMatcher et vérifie si un objet de la classe Maclasse a une valeur particulière dans le champ de statut. La façon dont je suis l'appel de ce dans les tests est:
verify(myDAO, times(1)).update(argThat(new StatusMatcher("SomeStatus")));
Ici update
est la méthode de la DAO qui est appelé avec quelques MyClass objet. Je veux voir si il a le bon état ou pas. C'est ce que j'obtiens:
Argument(s) are different! Wanted:
myDAO.update(
<Status matcher>
);
-> at com.foo.bar.MyTest.test1
Actual invocation has different arguments:
myDAO.update(
com.foo.bar.MyClass
);
Notez que cela fonctionne parfaitement pour tous les cas de tests à l'exception d'un cas de test. Donc je sais que les StatusMatcher etc. ont été codées correctement. Je ne suis pas sûr de ce qui est différent au sujet de la méthode de où se cette exception.
Ce que je veux savoir, c'est: dans quelles conditions le ArgumentMatcher lancer une telle exception afin que je puisse savoir ce que je suis absent (Il n'est pas pour me coller la méthode des codes)
S'il vous plaît dites-moi si l'explication n'est pas assez clair, et je vais essayer de l'améliorer. Merci pour la lecture de ce jour 🙂
EDIT: Voici le code de mon StatusMatcher classe
private class StatusMatcher extends ArgumentMatcher<MyClass> {
private String status;
public StatusMatcher(String hs) {
status = hs;
}
@Override
public boolean matches(Object argument) {
return status.equals(((MyClass)argument).getStatus());
}
}
StatusMatcher
et MyClass
?Le problème semble être dans
StatusMatcher
. S'il vous plaît montrer.
OriginalL'auteur Mustafa Hussain | 2014-04-08
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez dit, il échoue parce que les arguments sont différents. Regardez le test ci-dessous et vous verrez que la deuxième méthode de test échoue car le statut de votre
MyClass
instance est différente deSomeStatus
que vous avez passé dans le matcher.Je pourrais prendre une je devine que vous pourriez réutiliser des variables, ou ont un champ statique, etc, mais sans voir votre code de test, nul ne peut le dire.
En effet, le message n'est pas explicite et peut causer de la confusion. Content d'avoir pu aider, merci
Je ne sais pas si cela va être utile à personne, mais j'ai parfois utiliser quelque chose comme vérifier(mock).méthode(tout(MyClass.class)). C'est utile quand on n'a pas vraiment d'importance ce que vous passiez c'est agréable d'éviter ce genre d'erreur.
légende
OriginalL'auteur Morfic
J'ai aussi été confronté à ce problème. Ci-dessous est l'erreur et de sa solution:
J'ai utilisé la déclaration suivante à résoudre:
La cause initiale était:
OriginalL'auteur Rajkumar Pallerla