Java 莫基托';检测到放错位置的参数';“内部错误”;什么时候;方法
我试图模拟对spy对象的调用,并不断得到Java 莫基托';检测到放错位置的参数';“内部错误”;什么时候;方法,java,unit-testing,amazon-s3,mockito,Java,Unit Testing,Amazon S3,Mockito,我试图模拟对spy对象的调用,并不断得到org.mockito.exceptions.misusing.invalidUseofMatcherException 方法调用模拟如下所示: @Spy private AmazonS3Client m_clientToMockServer; // (...) Mockito.when(m_clientToMockServer.listObjects(Mockito.anyString(), Mockito.anyString()))
org.mockito.exceptions.misusing.invalidUseofMatcherException
方法调用模拟如下所示:
@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;
});
此外,此错误可能会出现,因为您将参数匹配器用于
无法模拟的方法。不能使用以下方法
存根/验证:final/private/equals()/hashCode()。模拟方法
不支持在非公共父类上声明
我已经检查了
amazon3client.listObjects(String,String)
不是final也不是private,所以我只能想象我可能实际上使用了错误的参数匹配。事实上,如果我使用任何其他实际字符串而不是Mockito.anyString()
matchers,则此代码段可以工作。doReturn().when()。。。你能提供尽可能最小的完整类来重现这个问题,而不仅仅是一个片段吗?@JBNizet解决了这个问题。引用他提供的链接的重要部分:有时使用when(Object)来对付间谍是不可能或不切实际的。因此,在使用间谍时,请考虑DeleTurn回答“Sun”()一系列的方法。
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))