J'ai eu une InvalidUseOfMatchersException lors de l'utilisation de Matchers any () avec Mockito dans JUnit. Je vais résumer la solution.
J'ai écrit un code de test comme celui-ci.
@Test
public void testDoSomething() {
Hoge hoge = mock(Hoge.class)
when(hoge.doSomething(any(), "bar")).thenReturn(true);
}
Puisque le premier argument de hoge.doSomething ()
était une classe définie par nous-mêmes, nous mettons ʻorg.mockito.Matchers.any () `.
Le deuxième argument est un type String, qui contient une chaîne de caractères spécifique.
Lorsque j'ai exécuté le test dans cet état, j'ai obtenu l'exception suivante.
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
5 matchers expected, 3 recorded:
-> at hogehoge
-> at hogehoge
-> at hogehoge
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"));
For more info see javadoc for Matchers class.
When using matchers, all arguments have to be provided by matchers.
Autant que j'ai lu ce message d'erreur, il semble que tous les arguments doivent être au format matchers. Pour les arguments de type String, il semble bon d'utiliser ʻeq () `.
when(hoge.doSomething(any(), "bar")).thenReturn(true);
J'ai changé le code ci-dessus pour le suivant et l'exception ne se produit plus.
when(hoge.doSomething(any(), eq("bar"))).thenReturn(true);
J'ai été sauvé par le message d'erreur poli qui détaillait la solution. Les matchers sont bons.
Recommended Posts