我正在 Junit 测试一个类,并且必须创建一些 Mockito 模拟对象。我感兴趣的代码行是这样的
Mockito.when(emailer.sendEmail(INPUT GOES HERE)).thenReturn(true);
电子邮件发送器的 sendEmail() 方法接受两个参数,但我不确定它们是什么。是否有一种通配符可以用来替换参数而不知道它们是什么?
最佳答案
正如问题评论中提到的。
Matchers.any(ClassName.class)
,这通常就是您想要的。在 Mockito 1.x 中,这代表任何对象,无论其类型如何,但通过接收类,它通常可以避免强制转换的需要。 (根据 Mockito 贡献者 Brice 在 SO comment 中的说法,这种行为将在 Mockito 2 及更高版本中发生变化,大概表现得更像isA
asany(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 .
关于java - 在不知道方法调用的参数的情况下使用mockito.when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23142886/