Mockito Problèmes - InvalidUseOfMatchersException
Je suis en train de faire un test à l'aide de mockito, mais je reçois ce problèmes:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
2 matchers expected, 1 recorded:
-> at cl.gps.tms.planifications.planification.test.PlanificationCreateTest.setUp(PlanificationCreateTest.java:68)
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
...
La PlanificationCreateTest utiliser le SimpleQueryBus pour créer une requête générique où le premier paramètre indique le type d'objet retourné, et le second les paramètres sont des filtres de la requête.
Je veux talon la SimpleQueryBus classe (bibliothèque externe) pour retourner une valeur null (uniquement pour l'instant)
La SimpleQueryBus code
public class SimpleQueryBus implements QueryBus {
public <T, R> R handle(Class<R> clazz, T query) throws Exception {
...
}
}
Mon code de test
public class PlanificationCreateTest {
private QueryBus queryBus;
@Before
public void setUp() throws Exception {
queryBus = Mockito.mock(SimpleQueryBus.class);
when(queryBus.handle(VehicleCollection.class, any(GetVehicle.class))).thenAnswer(null);
....
}
}
MISE À JOUR (RÉSOLU):
public class PlanificationCreateTest {
private QueryBus queryBus;
@Before
public void setUp() throws Exception {
queryBus = Mockito.mock(SimpleQueryBus.class);
//first example
when(queryBus.handle(any(Class.class), isA(VehicleAvailable.class))).thenReturn(null);
//second example
vehicle = new VehicleCollection("001", "name", "tag", "brand", "model");
when(queryBus.handle(any(Class.class), isA(GetVehicle.class))).thenReturn(vehicle);
....
}
}
Merci...
OriginalL'auteur Hector | 2014-07-24
Vous devez vous connecter pour publier un commentaire.
Cela se produit parce que vous êtes à l'aide de
any()
avec un paramètre réelVehicleCollection.class
de typeClass<VehicleCollection>
.Changer juste comme ci-dessous, et vous devriez être bien:
Mockito explique pourquoi: http://mockito.googlecode.com/svn/tags/1.7/javadoc/org/mockito/Matchers.html
when(queryBus.handle(any(VehicleCollection.class), any(GetVehicle.class))).thenAnswer(null);
cela n'a pas fonctionné?? Même erreur?Désolé, mais mon inexpérience avec mockito a joué un truc sur moi (le problème était avec la valeur de retour), avec theReturn(null) il a fonctionné correctement, mais je ne comprends pas la différence entre thenAnswer et thenReturn encore...
Je pense que vous trouverez cela ne fonctionnera jamais. Ce ne compile pas, parce que
any(VehicleCollection.class)
a typeVehicleCollection
, et vous êtes de passage comme un paramètre de typeClass
.J'ai finalement réussi à le résoudre. J'ai changé le code ci-dessus pour indiquer que j'ai fait. Merci
OriginalL'auteur squallsv
C'est aussi un problème pour
EasyMock
Fondamentalement, chaque fois que vous utilisez un Comparateur sur un argument, vous devez les utiliser sur tous les arguments
Devrait fonctionner
J'ai ajouté
isA(Class)
qui crée un matcher assurez-vous que le type d'argument correspond à la classe donnée.OriginalL'auteur dkatzel
Changer votre
when
clauseSi vous utilisez un comparateur, puis chaque argument doit être un matcher. Et dans ce cas, le premier argument doit être une correspondance de type
Class<R>
. Afin de ne pas les utiliserisA
ouany
, parce qu'ils vont vous donner le type deVehicleCollection
. Au lieu de cela, vous avez besoineq
.OriginalL'auteur Dawood ibn Kareem