我正在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。