【问题标题】:java mockito matcher InvalidUseOfMatchersExceptionjava mockito 匹配器 InvalidUseOfMatchersException
【发布时间】:2019-02-23 09:07:33
【问题描述】:

我正在使用 java spring boot 并尝试在我的单元测试中为 AWS s3 存储桶编写一个模拟。以下是在我执行测试时导致一些问题的代码

    @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:

注意RawImageRawText 是我创建的S3Object。你能帮我解决这个问题吗?我的代码出了什么问题?

【问题讨论】:

  • 你能展示你的静态导入吗?
  • 导入静态 org.mockito.AdditionalMatchers.and;导入静态 org.mockito.Mockito.when; @ernest_k- 这些是我的进口商品

标签: java spring-boot junit mockito


【解决方案1】:

在这种情况下,匹配器应用作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
    }
};

然后:

when(s3client.getObject(org.mockito.Matchers.argThat(objectRequestMatcher)))
    .thenReturn(RawText);

【讨论】:

  • 感谢您的回复。我发现使用正确的导入语句有困难。我应该用hamcrest还是mockito?你能帮我吗?
  • @Backtrack 抱歉,我没有在 IDE 中进行测试,并且参数错误。添加了完整的类名和更正的参数位置。
  • @Backtrack 可能是我们使用了不同的版本......对我来说,org.mockito.Matchers.argThat() 只接受org.hamcrest.Matcher&lt;T&gt; 作为参数(mockito-all-1.10.19)。你用的是什么版本?。
  • @Backtrack 即使在降级到您的版本后也无法重现。但是您的错误消息显示in the type ArgumentMatchers...,但我使用的是org.mockito.Matchers.argThat(objectRequestMatcher),而不是ArgumentMatchers.argThat。你能检查一下吗?
  • 你可能有一些冲突。你可以只用 mockito-all 试试吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
相关资源
最近更新 更多