我是Junit,正在测试一个类,必须创建一些Mockito mock对象。我感兴趣的代码行是这个
Mockito.when(emailer.sendEmail(INPUT GOES HERE)).thenReturn(true);
emailer的sendEmail()方法接收了两个参数,我不确定它们会是什么。有没有一种通配符可以在不知道参数会是什么的情况下用来替换参数?
如问题注释中所述。
Matchers.any(ClassName.class)
,这通常是您想要的。在Mockito 1.x中,它代表任何对象,无论其类型如何,但通过接收类,它通常可以避免强制转换的需要。(根据Mockito撰稿人Brice在SO评论中的说法,这种行为在Mockito 2及以后的版本中会发生变化,可能会像any(MyClass.class)
在英语中建议的那样表现得更像isA
。)Matchers.any()
,通常需要强制转换,对于基元来说不是一个好主意Matchers.anyInt()
或Matchers.anyShort()
等),它们对基元是有利的Matchers.anyString()
,因为字符串是一个常见的用例
因为Mockito
扩展了Matchers
,所以这些方法中的大多数将在Mockito
上可用,但一些IDE在跨子类查找静态方法时遇到了困难。您可以使用import static org.mockito.Matchers.*;
找到所有这些。
更多关于所有匹配器的信息,请访问org.mockito.matchers文档。
如果您遇到麻烦,或者想了解更多关于这些通配符如何在表面下工作的信息,请在此处阅读更多信息。