Matchers.any()在Mockito中为null值

Avi*_*hav 31 java mockito

假设我有这个对象objectDemo,它使用2个参数String和null调用方法objectDemoMethod.现在我想验证这个方法是用Mockito调用的:

objectDemo.objectDemoMethod("SAMPLE_STRING", null);
Run Code Online (Sandbox Code Playgroud)

我写了这个:

Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);
Run Code Online (Sandbox Code Playgroud)

但它给出了一个错误:

参数匹配器无效使用null值.

有没有其他方法传递空值?

Tun*_*aki 62

由于您只使用一个参数而不是另一个参数使用参数匹配器,因此您将获得错误消息.来自MatchersJavadoc:

如果您使用参数匹配器,则所有参数都必须由匹配器提供.

因此,修复方法是使用匹配器作为方法的第二个参数.在这种情况下,它将是匹配匹配null.根据Mockito和Java的版本,您可以:

对于Java≤7或Mockito 1的情况,示例使用第二个参数类型为的情况String:它需要替换为方法参数的实际类型.

  • 更新,我们可以使用 `nullable(String.class)` 作为 `isNull(String.class)` 现在被认为已弃用 (5认同)

Ama*_*lho 20

isNull 似乎已被弃用

在 Java 8 中,此方法将在 Mockito 3.0 中删除。此方法仅用于通用友好性以避免强制转换,Java 8 中不再需要此方法。

我认为你可以使用nullable

  • public static <T> T nullable(Class<T> clazz)

你可以使用类似的东西:

verify(objectDemo, times(1)).objectDemoMethod(any(String.class), nullable(String.class));
Run Code Online (Sandbox Code Playgroud)

  • 需要明确的是,只有`isNull(Class)` 被弃用了。`isNull()` 仍然存在,并且不会很快消失(至少在撰写本文时)。 (11认同)