gpt4 book ai didi

java - Matchers.any()在Mockito中为空值

转载 作者:行者123 更新时间:2023-12-01 18:33:18 25 4
gpt4 key购买 nike

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

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