2017-06-19 82 views
0

我正在使用Appender类的mockAppender方法,我试图计算如何让下面的代码段返回true,如果下面的文本没有被记录,或者.doAppend未被调用所有。返回False getFormattedMessage 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"); 
    } 
})); 

回答

0

谢谢。我想出了另一种方式。在验证方法上使用附加参数:

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

当您发现其他答案有帮助时,那么*接受*以表明这一点! – GhostCat

+0

其实这是行不通的。这将只验证该方法从未被满足匹配条件的参数调用。即使“doAppend”从来没有被调用过,验证也会“起作用”。我在答案中显示的方式验证了该方法被调用,并且它被调用的参数不符合匹配条件。它避免了必须定义匿名内部类的复杂性。 –

+0

我觉得我原来的问题措辞不对。我澄清了它使其更加清楚。 –

1

如果我理解这个问题,只需返回倒数:

return !((LogginEvent) ... etc. 

正如一个建议,你可以考虑使用一个@Captor在你验证,而不是,然后声称对@捕手的价值:

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