简体   繁体   English

Mockito.any() 用于<T>

[英]Mockito.any() for <T>

I want to mock a method with signature as:我想模拟一个带有签名的方法:

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

I mock it as below:我嘲笑它如下:

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

But I get error as:但我得到的错误是:

The method documentToPojo(Document, Class<T>) in the type MongoUtil is not applicable for the arguments (Document, WorkItemDTO) MongoUtil类型中的方法documentToPojo(Document, Class<T>)不适用于参数(Document, WorkItemDTO)

Is there any method in Mockito which will help me mock for T? Mockito 中是否有任何方法可以帮助我模拟 T?

Note that documentToPojo takes a Class as its second argument.请注意, documentToPojoClass作为其第二个参数。 any(Foo.class) returns an argument of type Foo , not of type Class<Foo> , whereas eq(WorkItemDTO.class) should return a Class<WorkItemDTO> as expected. any(Foo.class)返回Foo类型的参数,而不是Class<Foo>类型的参数,而eq(WorkItemDTO.class)应该按预期返回Class<WorkItemDTO> I'd do it this way:我会这样做:

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

You can match a generic Class<T> argument using simply any( Class.class ) , eg.:您可以使用简单的any( Class.class )来匹配通用Class<T>参数,例如:

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

Cheers,干杯,

You can do it using ArgumentMatchers.any() qualified with the type, like so:您可以使用带有类型限定的 ArgumentMatchers.any() 来完成,如下所示:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM