我正在尝试模拟对间谍对象的调用,并不断获得org.mockito.exceptions.misusing.InvalidUseOfMatchersException
。
方法调用模拟如下:
@Spy
private AmazonS3Client m_clientToMockServer;
// (...)
Mockito.when(m_clientToMockServer.listObjects(Mockito.anyString(), Mockito.anyString()))
.thenAnswer((Answer<ObjectListing>) invocation -> {
ObjectListing objectListing = (ObjectListing) invocation.callRealMethod();
objectListing.setMaxKeys(2);
return objectListing;
});
错误消息显示:
您不能在验证或存根之外使用参数匹配器。
正确使用参数匹配器的示例:
when(mock.get(anyInt())).thenReturn(null); doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject()); verify(mock).someMethod(contains("foo"))
此外,可能会出现此错误,因为您将参数匹配器与 无法嘲笑的方法。以下方法不能 存根/验证:final / private / equals()/ hashCode()。模拟方法 不支持在非公共父类上声明。
我检查了AmazonS3Client.listObjects(String, String)
既不是最终的也不是私有的,所以我只能想象我可能实际上使用了错误的参数匹配。实际上,如果我使用任何其他实际的字符串代替Mockito.anyString()
匹配器,则此代码段有效。