假设我有这个对象objectDemo,它使用2个参数String和null调用方法objectDemoMethod。现在,我想验证此方法是否已通过Mockito调用:
objectDemo.objectDemoMethod("SAMPLE_STRING", null);
我写了这个:
Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);
但它给出了一个错误:
无效使用参数匹配器作为空值。
还有其他方法可以传递空值吗?
最佳答案
由于您仅对一个参数使用参数匹配器,而对另一个参数不使用参数,因此会出现错误消息。从Matchers
Javadoc:
如果使用参数匹配器,则所有参数都必须由匹配器提供。
因此,解决方法是对方法的第二个参数也使用匹配器。在这种情况下,它将是匹配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/60120154/