4
我试图验证在错误情况下我的代码记录了正确的消息,所以我嘲笑了org.apache.commons.logging.Log
,并试图验证它是否正确调用。如何使Mockito参数匹配方法签名
我期待验证的方法的签名是:error(Object, Throwable)
我期望有一个传入的字符串,其中包含文本“消息对于队列太大”。在这种情况下,throwable将为null。
这里是我的代码来验证这一点:
Mockito.verify(errorLog, Mockito.atLeastOnce()).error(
Mockito.matches("*Message is too big for queue*"),
Mockito.isNull(Throwable.class));
在运行此,我虽然得到一个错误:
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
);
看来,这里的问题是,这Mockito.matches()
使得它看起来对当实际签名是(Object,Throwable)时带有签名(String,Throwable)的方法。
如何让这些匹配?我知道字符串是问题,因为如果我用Mockito.any()
替换Mockito.matches()
它会通过。
如果您删除,会发生什么的开头和结尾从你的论点到Mockito.matches的星号?我在想这可能会使正则表达式匹配。 – unigeek
[ArgumentCaptor](http://site.mockito.org/mockito/docs/current/org/mockito/ArgumentCaptor.html)可能是您的案例中的一个选项 – Mindaugas
我尝试了ArgumentCaptor并且没有帮助: 'Argument (s)是不同的!求购: log.error( [email protected], 空 );' – Steve