假设我有这个对象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的版本,您可以:
从Mockito 2开始,您可以使用ArgumentMatchers.isNull().这适用于Java 8及更高版本:
verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull());
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用的是Java 7或更早版本,则需要使用显式强制转换才能使其正常工作,因为这些Java版本中的类型推断未考虑所调用方法的类型:
verify(objectDemo, times(1)).objectDemoMethod(any(String.class), (String) isNull());
Run Code Online (Sandbox Code Playgroud)如果您使用的是Mockito 1,则可以使用Matchers.isNull(clazz):
verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));
Run Code Online (Sandbox Code Playgroud)对于Java≤7或Mockito 1的情况,示例使用第二个参数类型为的情况String:它需要替换为方法参数的实际类型.
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)
| 归档时间: |
|
| 查看次数: |
55304 次 |
| 最近记录: |