我正在Junit测试一个类,并且不得不创建一些Mockito模拟对象。我感兴趣的代码行是这样

Mockito.when(emailer.sendEmail(INPUT GOES HERE)).thenReturn(true);


emailer的sendEmail()方法有两个参数,但我不确定它们是什么。是否有某种通配符可用于替换参数而不知道它们将是什么?

最佳答案

如问题评论中所述。


Matchers.any(ClassName.class),通常是您想要的。在Mockito 1.x中,它代表任何对象,而不管其类型如何,但是通过接收类,它通常将避免需要强制转换。 (根据SO Brice中Mockito贡献者comment的情况,此行为将在Mockito 2及更高版本中发生变化,大概表现得更像isA,就像any(MyClass.class)用英语暗示的那样。)
Matchers.any(),通常需要强制转换,对于基元不是一个好主意。
Matchers.anyInt()Matchers.anyShort()(等),它们对于基元很有用。
Matchers.anyString(),因为字符串是常见的用例。


由于Mockito扩展了Matchers,因此大多数这些方法将在Mockito上可用,但是某些IDE难以在子类之间找到静态方法。您可以使用import static org.mockito.Matchers.*;找到所有这些文件。

org.mockito.Matchers documentation上了解有关所有可用匹配器的更多信息。

如果您遇到麻烦,或者想了解更多有关这些通配符在表面下如何工作的信息,请read more here

09-13 06:42