Ich habe eine InvalidUseOfMatchersException erhalten, wenn ich Matchers any () mit Mockito in JUnit verwende. Ich werde die Lösung zusammenfassen.
Ich habe so einen Testcode geschrieben.
@Test
public void testDoSomething() {
Hoge hoge = mock(Hoge.class)
when(hoge.doSomething(any(), "bar")).thenReturn(true);
}
Da das erste Argument von "hoge.doSomething ()" eine von uns definierte Klasse war, setzen wir "org.mockito.Matchers.any ()". Das zweite Argument ist ein String-Typ, der eine bestimmte Zeichenfolge enthält.
Als ich den Test in diesem Zustand ausführte, erhielt ich die folgende Ausnahme.
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.
Soweit ich diese Fehlermeldung gelesen habe, müssen anscheinend alle Argumente im Matcher-Format vorliegen. Für Argumente vom Typ String scheint es gut zu sein, "eq ()" zu verwenden.
when(hoge.doSomething(any(), "bar")).thenReturn(true);
Ich habe den obigen Code wie folgt geändert und die Ausnahme tritt nicht mehr auf.
when(hoge.doSomething(any(), eq("bar"))).thenReturn(true);
Ich wurde durch die höfliche Fehlermeldung gerettet, in der die Lösung detailliert beschrieben wurde. Matchers ist gut.