34

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

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 吗?

4

3 回答 3

46

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

when(mongoUtil.documentToPojo(
    Mockito.any(Document.class),
    Mockito.eq(WorkItemDTO.class))).thenReturn(...);
于 2015-05-27T20:00:22.203 回答
5

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

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

干杯,

于 2015-05-27T11:06:49.997 回答
1

您可以使用具有类型限定的 ArgumentMatchers.any() 来执行此操作,如下所示:

Mockito.when(
    mongoUtil.documentToPojo(
        Mockito.any(Document.class),
        ArgumentMatchers.<Class<WorkItemDTO>>any()
    )
).thenReturn(...);
于 2019-10-19T00:07:08.210 回答