<t>的Mockito.any()

时间:2015-05-27 10:20:02

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

我想用签名模拟一个方法:

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

我嘲笑如下:

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

但我得到错误:

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

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

3 个答案:

答案 0 :(得分:33)

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

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

答案 1 :(得分:4)

您可以使用简单Class<T>匹配通用any( Class.class )参数,例如:

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

干杯,

答案 2 :(得分:0)

您可以使用符合类型的ArgumentMatchers.any()来做到这一点,就像这样:

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