Java Mockito.any()表示<;T>;

Java Mockito.any()表示<;T>;,java,unit-testing,mockito,mongodb-java,springmockito,Java,Unit Testing,Mockito,Mongodb Java,Springmockito,我想模拟一个签名为的方法: public <T> T documentToPojo(Document mongoDoc, Class<T> clazz) 但我得到的错误是: 类型MongoUtil中的方法documentToPojo(Document,Class)不适用于参数(Document,WorkItemDTO) Mockito中是否有任何方法可以帮助我模拟T?您可以简单地使用any(Class.Class)匹配泛型Class参数,例如: Mockito.when

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

public <T> T documentToPojo(Document mongoDoc, Class<T> clazz)
但我得到的错误是:

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


Mockito中是否有任何方法可以帮助我模拟T?

您可以简单地使用
any(Class.Class)
匹配泛型
Class
参数,例如:

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

干杯,

注意,
documentToPojo
将类作为其第二个参数
any(Foo.class)
返回类型为
Foo
,而不是类型为
class
,而
eq(WorkItemDTO.class)
应按预期返回
类的参数。我会这样做:

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

您可以使用ArgumentMatchers.any()完成此操作,并使用该类型限定,如下所示:

Mockito.when(
    mongoUtil.documentToPojo(
        Mockito.any(Document.class),
        ArgumentMatchers.<Class<WorkItemDTO>>any()
    )
).thenReturn(...);
Mockito.when(
mongoUtil.documentToPojo(
Mockito.any(Document.class),
ArgumentMatchers.any()
)
).然后返回(…);

为什么需要模拟第二个参数?实际上,我想为这个方法返回mock对象。我不是在嘲笑第二个参数。我在嘲弄文档Topojo方法对不起,我试图表达,这不管用吗
Mockito.when(mongoUtil.documentToPojo(Mockito.any(Document.class),WorkItemDTO.class))
没有第二个
any
?就像
Mockito.any(Document.class)
表示接受any
文档时,第二个参数表示接受any
WorkItemDTO
,当您确实想要接受任何
类时。正如下面的答案所说,使用
Mockito.any(Class.Class)
@GáborBakos:是的,但是您需要一个
eq()
包装器。如果一个参数使用Mockito匹配器,那么它们都必须使用Mockito matchers.Mockito.any对T不起作用,我在问题中已经提到了。它对我不起作用。我使用的是Java 8和Mockito 2.7.5,编译时显示参数不匹配itself@MahenderReddyYasa恐怕这还不足以诊断;这可能是相关的,也可能是其他原因。请提出一个单独的问题,包括您的代码和错误的全文,并链接到此问题,以便回答者了解上下文。
Mockito.when(
    mongoUtil.documentToPojo(
        Mockito.any(Document.class),
        ArgumentMatchers.<Class<WorkItemDTO>>any()
    )
).thenReturn(...);