在“ when”方法中出现Mockito“检测到错误的参数”错误

时间:2018-12-04 18:53:03

标签: java unit-testing amazon-s3 mockito

我正在尝试模拟对间谍对象的调用,并不断获得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()匹配器,则此代码段有效。

0 个答案:

没有答案