gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:11:28 36 4
gpt4 key购买 nike

假设我有这个对象 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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com