any(object.class) 在 mockito 中抛出 null



我有以下类:

mockStatic(Exception.class); 
PowerMockito.doNothing().when(Exception.class);
Exception.throwErrorIfExists(any(Object.class)); // line3

在异常类中,方法定义如下:

static void throwErrorIfExists(def model){
  if(model.hasErrors())
    throwError(model)
  }

在第 3 行引发以下异常:Cannot invoke method hasErrors() on null object java.lang.NullPointerException: Cannot invoke method hasErrors() on null object

any(object.class)怎么可能在任何情况下都为 NULL,因为任何只是意味着返回任何内容?

我认为您滥用了any()方法。这种方法的存在是为了你可以验证与模拟的交互,例如,你可以说:

// checks yourMethod() was invoked with any argument
verify(mockedObject).yourMethod(any(SomeClass.class));

如果要使用某个任意对象调用方法,则应在测试中创建该对象并将其传入。 any()不是一种只为你制作对象的方法。

你不能用空参数调用 ThrowErrorIfExists,因为你调用了一个方法 (hasErrors() 在它上面。这与任何嘲笑无关,但这只是您方法中的一个错误。

使用匹配器调用方法

Exception.throwErrorIfExists(any(Object.class));

这很奇怪;匹配器用于配置模拟的行为,例如

PowerMockito.doNothing().when(Exception.throwErrorIfExists(any(Object.class)));

然后你可以用任何对象调用throwErrorIfExist来触发"什么都不做"。

相关内容

  • 没有找到相关文章

最新更新