java mockito matcher InvalidUseofMatcherException

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

我正在使用JavaSpringBoot,并试图在我的unittest中为AWSS3 bucket编写一个模拟。下面是一段代码,它在我执行测试时导致了一些问题

    @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);