Ich versuche zu bestätigen, dass die korrekte Nachricht von meinem Code in einem Fehlerzustand protokolliert wird, also habe ich org.apache.commons.logging.Log
verspottet und ich versuche zu überprüfen, dass es korrekt aufgerufen wird.Wie man Mockito-Argumente mit Methodensignatur vergleicht
Die Signatur der Methode, die ich überprüfen möchte, ist: error(Object, Throwable)
Ich erwarte eine Zeichenfolge übergeben, die eine Vielzahl anderer Dinge enthält, enthält aber den Text "Nachricht ist zu groß für die Warteschlange". In diesem Fall ist der Wert throwable null.
Hier ist mein Code, um diese zu überprüfen:
Mockito.verify(errorLog, Mockito.atLeastOnce()).error(
Mockito.matches("*Message is too big for queue*"),
Mockito.isNull(Throwable.class));
Wenn diese laufen, bekomme ich einen Fehler aber:
Argument(s) are different! Wanted:
log.error(
matches("*Message is too big for queue*"),
isNull()
);
-> at com.company.TestClass.testMessageTooBig(TestClass.java:178)
Actual invocation has different arguments:
log.error(
|ClassUnderTest|Message is too big for queue (size=41). It will never fit, so discarding.,
null
);
Es scheint, dass das Problem hier ist, dass die Mockito.matches()
es aussehen läßt für eine Methode mit der Signatur (String, Throwable), wenn die eigentliche Signatur (Object, Throwable) ist.
Wie kann ich diese zusammenbringen? Ich kenne die String ist das Problem, denn wenn ich die Mockito.matches()
durch Mockito.any()
ersetze es passiert.
Was würde passieren, wenn Sie die führende entfernt und Hinter Sterne von Ihrem Argument zu Mockito.matches? Ich denke, das könnte die Regex passen lassen. – unigeek
[ArgumentCaptor] (http://site.mockito.org/mockito/docs/current/org/mockito/ArgumentCaptor.html) könnte eine Option in Ihrem Fall sein – Mindaugas
Ich versuchte ArgumentCaptor und es hat nicht geholfen: 'Argument (s) sind anders! Gesucht: log.error ( [email protected], null ); ' – Steve