2017-06-19 2 views
0

Ich verwende die MockAppender-Methode der Appender-Klasse, und ich versuche herauszufinden, wie das folgende Code-Snippet True zurückgegeben wird, wenn entweder der folgende Text nicht protokolliert oder .doAppend nicht aufgerufen wird alle.Rückgabe False zu getFormattedMessage für LoggingEvent

verify(mockAppender).doAppend(argThat(new ArgumentMatcher() { 
    @Override 
    public boolean matches(final Object argument) { 
    return ((LoggingEvent) argument).getFormattedMessage().contains(
     "Sending request to partner: " 
     + "https://<URL>/hosted/api/tokenize with args"); 
    } 
})); 

Antwort

0

Danke. Ich habe auch einen anderen Weg gefunden. einen zusätzlichen Parameter auf der verifizieren Methode verwendet:

verify(mockAppender, never()).doAppend(argThat(new ArgumentMatcher() { 
    @Override 
    public boolean matches(final Object argument) { 
    return ((LoggingEvent) argument).getFormattedMessage().contains(
     "Sending request to partner: " 
     + "https://<URL>/hosted/api/tokenize with args"); 
    } 
})); 
+1

Wenn Sie die andere Antwort hilfreich, dann * akzeptieren *, um zu zeigen! – GhostCat

+0

Eigentlich wird das nicht funktionieren. Das wird nur überprüfen, dass die Methode nie mit einem Argument aufgerufen wird, das die Matcher-Bedingung erfüllt. Die Überprüfung würde "funktionieren", selbst wenn "doAppend" nie aufgerufen würde. Die Art und Weise, wie ich in meiner Antwort gezeigt habe, bestätigt, dass die Methode aufgerufen wurde und mit einem Parameter aufgerufen wurde, der die Matcher-Bedingung nicht erfüllt. Und es vermeidet die Komplexität, eine anonyme innere Klasse definieren zu müssen. –

+0

Ich glaube, ich habe meine ursprüngliche Frage falsch formuliert. Ich habe es klargestellt, um es klarer zu machen. –

1

Wenn ich die Frage verstehen, bringen Sie einfach das inverse:

return !((LogginEvent) ... etc. 

nur als Vorschlag, könnte man erwägen, eine @Captor in Ihrem überprüfen stattdessen verwenden, und dann auf dem @ Captor Wert behaupten :

ArgumentCaptor<LoggingEvent> argument = ArgumentCaptor.forClass(LoggingEvent.class); 
// or more succinct to use a field with @Captor annotation 

verify(mockAppender).doAppend(logEventCaptor); 
assertFalse(logEventCaptor.getValue().contains("theTextYouWantToExclude"); 
Verwandte Themen