java - Matchers.any() 用于 Mockito 中的空值

标签 java mockito

假设我有这个对象 objectDemo,它使用 2 个参数 Stringnull 调用方法 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/

相关文章:

Java解压缩字节数组-数据检查不正确

java - 使用 Mockito 模拟 spring 存储库删除时无法应用

java - 具有比较参数的 Mockito 模拟方法 - 此处检测到放错位置的参数匹配器

java - 来自第三方 API 的模拟调用和响应

java - 如何在 vert.x java 中对处理程序进行单元测试?

java - 模拟 : doNothing tries to invoke the void method in Android instrumented test

java - 如何根据 localStorage 数据设置默认下拉值和选择

java - 使用 Java 获取 WiFi 网络上的所有设备

java - 如何存储使用 hibernate 命令的 ArrayList?

java - Hibernate 忽略带有投影 beans 的链式 setter