【问题标题】:Mockito.any() for <T><T> 的 Mockito.any()
【发布时间】:2015-05-27 10:20:02
【问题描述】:

我想模拟一个带有签名的方法:

public <T> T documentToPojo(Document mongoDoc, Class<T> clazz)

我模拟如下:

Mockito.when(mongoUtil.documentToPojo(Mockito.any(Document.class), Mockito.any(WorkItemDTO.class)))

但我得到错误:

MongoUtil 类型中的方法documentToPojo(Document, Class&lt;T&gt;) 不适用于参数(Document, WorkItemDTO)

Mockito 中有什么方法可以帮助我模拟 T 吗?

【问题讨论】:

  • 为什么要mock第二个参数?
  • 其实我想为这个方法返回模拟对象。我不是在嘲笑第二个参数。我在嘲笑 documentToPojo 方法
  • 对不起,我试图表达,这行不通吗? Mockito.when(mongoUtil.documentToPojo(Mockito.any(Document.class), WorkItemDTO.class)) 没有第二个any?
  • 就像Mockito.any(Document.class) 说接受任何Document,当你真的想接受任何Class 时,你的第二个参数说接受任何WorkItemDTO。正如下面的答案所说,使用Mockito.any(Class.class)
  • @GáborBakos:是的,但你需要一个 eq() 包装器。如果一个参数使用 Mockito 匹配器,则它们都必须使用 Mockito 匹配器。

标签: java unit-testing mockito mongodb-java springmockito


【解决方案1】:

请注意,documentToPojoClass 作为其第二个参数。 any(Foo.class) 返回一个 Foo 类型的参数,而不是 Class&lt;Foo&gt; 类型的参数,而 eq(WorkItemDTO.class) 应该按预期返回一个 Class&lt;WorkItemDTO&gt;。我会这样做:

when(mongoUtil.documentToPojo(
    Mockito.any(Document.class),
    Mockito.eq(WorkItemDTO.class))).thenReturn(...);

【讨论】:

  • 它对我不起作用。我正在使用 Java 8 和 Mockito 2.7.5
  • 它在编译时显示参数不匹配
  • @MahenderReddyYasa 恐怕这些信息不足以诊断;这可能是相关的,也可能是别的东西。请提出一个单独的问题,包括您的代码和错误的全文,并链接到该问题,以便回答者了解上下文。
【解决方案2】:

您可以简单地使用any( Class.class ) 匹配通用Class&lt;T&gt; 参数,例如:

Mockito.when( mongoUtil.documentToPojo( Mockito.any( Document.class ),
                                        Mockito.any( Class.class ) ) );

干杯,

【讨论】:

  • Mockito.any 对 T 不起作用,我在我的问题中提到了它。
【解决方案3】:

您可以使用具有类型限定的 ArgumentMatchers.any() 来做到这一点,如下所示:

Mockito.when(
    mongoUtil.documentToPojo(
        Mockito.any(Document.class),
        ArgumentMatchers.<Class<WorkItemDTO>>any()
    )
).thenReturn(...);

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2017-05-27
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多