java mockito matcher InvalidUseofMatcherException
我正在使用JavaSpringBoot,并试图在我的unittest中为AWSS3 bucket编写一个模拟。下面是一段代码,它在我执行测试时导致了一些问题java mockito matcher InvalidUseofMatcherException,java,spring-boot,junit,mockito,Java,Spring Boot,Junit,Mockito,我正在使用JavaSpringBoot,并试图在我的unittest中为AWSS3 bucket编写一个模拟。下面是一段代码,它在我执行测试时导致了一些问题 @Mock AmazonS3 s3client; when(s3client.getObject(new GetObjectRequest(Mockito.any(String.class), and(Mockito.any(String.class),Mockito.en
@Mock
AmazonS3 s3client;
when(s3client.getObject(new GetObjectRequest(Mockito.any(String.class),
and(Mockito.any(String.class),Mockito.endsWith(".txt"))
))).thenReturn(RawText);
when(s3client.getObject(new GetObjectRequest(Mockito.any(String.class),
and(Mockito.any(String.class),Mockito.endsWith(".png"))
))).thenReturn(RawImage);
我要做的是,我需要从S3存储桶中读取png文件和文本文件。根据内容类型,我尝试返回对象。当我执行测试时,我得到
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
1 matchers expected, 2 recorded:
注意
RawImage
和RawText
是我创建的S3Object
。你能帮我解决这个问题吗?我的代码出了什么问题?在这种情况下,匹配器应该用作getObject
的参数。因此,如果实际参数不是模拟参数,则可能需要实现自定义匹配器:
org.hamcrest.Matcher<GetObjectRequest> objectRequestMatcher =
new BaseMatcher<GetObjectRequest>() {
@Override
public void describeTo(Description arg0) {
}
@Override
public boolean matches(Object arg0) {
return ((GetObjectRequest) arg0).getName().endsWith("txt"); //just an example
}
};
你能显示你的静态导入吗?导入static org.mockito.AdditionalMatchers.and;导入静态org.mockito.mockito.when@欧内斯特k-这些是我的进口货谢谢你的回复。我发现使用正确的导入语句有困难。我应该用hamcrest还是mockito?你能帮我吗?@Backtrack抱歉,我没有在IDE中测试它,而且参数错误。添加了完整的类名和更正的参数位置。@回溯可能是我们使用了不同的版本。。。对我来说,
org.mockito.Matchers.argThat()
只接受org.hamcrest.Matcher
作为参数(mockito-all-1.10.19
)。您使用的是什么版本?@Backtrack即使降级到您的版本后也无法复制。但是您的错误消息在ArgumentMatchers类型中显示为。
,但我使用的是org.mockito.Matchers.argThat(objectRequestMatcher)
,而不是ArgumentMatchers.argThat
。你能检查一下吗?你可能有一些冲突。你能试着用所有的吗?
when(s3client.getObject(org.mockito.Matchers.argThat(objectRequestMatcher)))
.thenReturn(RawText);