当前位置: 首页 > 面试题库 >

Matchers.any()在Mockito中为空值

徐栋
2023-03-14
问题内容

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

objectDemo.objectDemoMethod("SAMPLE_STRING", null);

我写了这个:

Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);

但它给出了一个错误:

为空值无效使用参数匹配器。

还有其他方法可以传递空值吗?


问题答案:

由于您仅对一个参数使用参数匹配器,而对另一个参数不使用参数,这是您收到的错误消息。从MatchersJavadoc:

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

因此,解决方法是对方法的第二个参数也使用匹配器。在这种情况下,它将是matcher matching
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:需要将其替换为方法参数的实际类型。



 类似资料:
  • 问题内容: 我需要在jaxb中将空值显示为空元素。我正在使用jaxb的moxy实现。我找到了这个选项 是否可以在类级别应用任何类似的扩展(对于其中定义的所有元素) 问题答案: 我强烈建议使用不存在节点或使用属性来表示。这与模式验证(即或不是有效的type元素)一起使用时效果最佳。但是,如果不能这样做,那么可以完成用例: 标准JAXB行为 使用标准的API,你可以控制NULL是表示为不存在的节点或与

  • 我的服务级别如下,接下来是测试- 测试类:在我下面的测试类中,我在调试时将响应实体对象视为null,这会导致NPE。 当我调试测试时,我在主服务类的以下行中获得了一个空值——

  • 我正在尝试Mockito进行模拟和单元测试。 试图使用模拟autowired bean。但bean在运行时为空。 正在测试的类。 测试类: 错误: 我调试过,是因为(使用MockBean进行模拟,因为它是。) 这个代码有什么问题?

  • 我有一个工厂接口B,它返回类型a的对象。类型a也是一个接口。 我很难弄清楚如何在模拟中为.doSomething()定义方法行为,因为每当工厂返回一个新的实例时,它都需要知道如何doSomething()。 这就是我到目前为止嘲笑工厂的地方,但是A不知道如何做()。 是否有某种方法可以为将返回的所有实例定义。doSomething()? 非常感谢任何帮助。

  • 我试图实现Mockito来测试一个特定的方法,但是。然后返回(…)似乎总是返回空对象,而不是我想要的: 切: Spring配置: 莫基托试验方法: 系统输出: 这里发生的事情是,当我运行测试时,在上面标有//PROBLEM的CUT中的行上,serviceSolutions对象为空。我的愿望是让那个对象从我的测试方法中填充我的“无效服务响应”对象。从我的System.out.println的输出来看

  • 问题内容: 我正在使用JPA,hibernate3。 当没有空值或空值时,此查询就像一个超级按钮。但是 traceEntityVO.getLotNumber(),traceEntityVO.getMfrLocId(),traceEntityVO.getExpDate()的 值可能为null或为空 。 在这种情况下,将针对变量而不是 null 条件来检查值’null’或’‘ 。当我不确定参数值是否为