我正在使用Mockito进行单元测试。Mockito中有许多像anyString()
、anyBoolean()
这样的匹配器。但假设我有一个像一样的自定义enum
枚举登录类型.java
//LoginType.java
public enum LoginType {
FACEBOOK,
EMAIL,
GOOGLE
}
在其中一个方法参数中,我需要传递LoginType
的一个实例。如何在不显式传递LoginType.FACEBOOK
或LoginType.GOOGLE
的情况下传递参数。类似anyString()
。这方面的任何提示都是有用的。
对于any
行为,在Java 8上只调用Matchers.any()
就足够了。这时参数类型推断就出现了。
您也可以选择Matchers.any(LoginType.class)
,它在Mockito 1.x中具有纯any()
行为,但将在Mockito2.0及更高版本中提供类型检查。在任何一种情况下,传入类文字都将帮助Java获得推理所需的类型信息。
对于相关问题:
-
如果您有一个泛型类型,那么类文字也不够;您需要将其指定为显式方法参数:
Matchers.<YourContainer<YourType>>any();
或者提取到静态辅助方法,您需要这样做,而不是常量或局部变量,因为Mockito匹配器通过副作用工作:
public static LoginType anyLoginType() { return Matchers.any(); }
-
最后,对于未来可能在这里实现自定义匹配逻辑的读者,请查找
Matchers.argThat
或MockitoHamcrest.argThat
,以将Hamcrest样式的Matcher对象调整为Mockito方法调用。