[JAVA] Ich habe eine InvalidUseOfMatchersException erhalten, wenn ich eine in JUnits Mock verwende

Einführung

Ich habe eine InvalidUseOfMatchersException erhalten, wenn ich Matchers any () mit Mockito in JUnit verwende. Ich werde die Lösung zusammenfassen.

Symptome

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.

Analyse

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.

Lösung

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);

schließlich

Ich wurde durch die höfliche Fehlermeldung gerettet, in der die Lösung detailliert beschrieben wurde. Matchers ist gut.

Recommended Posts

Ich habe eine InvalidUseOfMatchersException erhalten, wenn ich eine in JUnits Mock verwende
Beim Verschlüsseln mit Node + Docker wurde eine Fehlermeldung angezeigt
Bei der Verwendung von nextInt, nextLine und substring ist ein Fehler aufgetreten.
Als ich ein mit WildFly Swarm erstelltes Glas ausführte, erhielt ich eine InvocationTargetException.
Testcode mit Mock mit JUnit (EasyMock Center)
Vorsichtsmaßnahmen bei der Verwendung von Mockito.anyString als Argument beim Verspotten mit Mockito
Ich habe versucht, JOOQ mit Gradle zu verwenden
Als ich versuchte, mit Docker eine Umgebung für PHP7.4 + Apache + MySQL zu erstellen, blieb ich stecken [Windows & Mac]
Bei der Registrierung eines neuen Benutzers wurde ein Fehler namens ActiveRecord :: NotNullViolation und der Umgang damit angezeigt.
Ich habe versucht, Scalar DL mit Docker zu verwenden
Ich habe einen Öko-Server mit Scala gemacht
Ich habe versucht, OnlineConverter mit SpringBoot + JODConverter zu verwenden
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Verwendung eines versteckten Typs beim PUT mit Thymeleaf
Nach dem Erneuern des Zertifikats mit CircleCI × fastlane erhalte ich den Fehler Exit status: 65.