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文档时,第二个参数表示接受anyWorkItemDTO
,当您确实想要接受任何类时。正如下面的答案所说,使用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(...);