假设我有这个对象 objectDemo
,它使用 2 个参数 String
和 null
调用方法 objectDemoMethod
.现在我想用 Mockito 验证这个方法是否被调用:
objectDemo.objectDemoMethod("SAMPLE_STRING", null);
我写了这个:
Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);
但它给出了一个错误:
Invalid use of argument matchers for null value.
还有其他方法可以传递 null
值吗?
最佳答案
您收到的错误消息是预期的,因为您只对一个参数使用参数匹配器,而不是另一个。来自 Matchers
Javadoc:
If you are using argument matchers, all arguments have to be provided by matchers.
因此,解决方法是对方法的第二个参数也使用匹配器。在这种情况下,它将是匹配 null
的匹配器。根据 Mockito 和 Java 的版本,您可以:
从 Mockito 2 开始,您可以使用
ArgumentMatchers.isNull()
.这适用于 Java 8 及更高版本:verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull());
请注意,如果您使用 Java 7 或更早版本运行,则需要显式强制转换才能使其工作,因为这些 Java 版本中的类型推断不考虑调用的方法的类型:
verify(objectDemo, times(1)).objectDemoMethod(any(String.class), (String) isNull());
如果您使用的是 Mockito 1,您可以使用
Matchers.isNull(clazz)
而是:verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));
对于 Java ≤ 7 或 Mockito 1 的情况,示例使用第二个参数为 String
类型的情况:需要将其替换为方法参数的实际类型。
关于java - Matchers.any() 用于 Mockito 中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32841543/