Im Test können sich die in den Einstellungen für die Methodenoperation und die Überprüfung des Methodenaufrufs an den Mock übergebenen Argumente von den Argumenten unterscheiden, die tatsächlich von der Testzielklasse an die Mock-Methode übergeben wurden. Zu diesem Zeitpunkt kann mithilfe von ArgumentMatcher der Inhalt des Arguments sanft überprüft werden.
Es gibt Verwendungen wie.
Wenn Sie beispielsweise nur den übergebenen Typ überprüfen möchten, können Sie die Methode ArgumentMatchers.any verwenden. Es wird auch verwendet, um die Validierung von Argumenten zu überspringen, die bereits in anderen Testfällen validiert wurden.
Mockito.doNothing().when(display).display(ArgumentMatchers.any());
Mockito.verify(display, Mockito.times(1)).display(ArgumentMatchers.any());
Einige der Basistypen und Auflistungstypen verfügen im Voraus über entsprechende Methoden. Sie können sie jedoch auch erstellen, wenn Sie den Typ Ihrer eigenen Klasse überprüfen.
Mockito.doNothing().when(display).display(ArgumentMatchers.anyString());
Mockito.verify(display, Mockito.times(1)).display(ArgumentMatchers.any(String.class));
--Erstellen Sie eine Implementierungsklasse für die ArgumentMatcher-Schnittstelle. Zu diesem Zeitpunkt wird die Übereinstimmungsmethode überschrieben.
ArgumentMatcher<String> matcher = argument -> {
assertThat(argument.substring(1), is(msg));
return true;
};
Mockito.doNothing().when(display).display(Mockito.argThat(matcher));
Mockito.verify(display, Mockito.times(1)).display(Mockito.argThat(matcher));
Die Lambda-Formel wird in der obigen Formel verwendet. Der Lambda-Ausdruck ist eine weitere Auslassung der Beschreibung durch die anonyme Klasse.
Die Überschreibung der Übereinstimmungsmethode von ArgumentMatcher wird unter Verwendung einer anonymen Klasse wie folgt geschrieben.
ArgumentMatcher<String> matcher = new ArgumentMatcher(
@Override
public boolean matches(Object argument) {
assertThat(argument.substring(1), is(msg));
return true;
}
)
Mit der Lambda-Gleichung können Sie:
Zum Üben schreiben wir noch einmal die Definition von ArgumentMatcher.
ArgumentMatcher<String> matcher = argument -> {
assertThat(argument.substring(1), is(msg));
return true;
};
Gut gemacht.
Recommended Posts