任何(object.class)在mockito中抛出null

时间:2014-12-01 10:47:08

标签: java nullpointerexception powermock

我有以下课程:

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,因为任何简单的方法都可以返回任何内容?

2 个答案:

答案 0 :(得分:0)

当你调用一个方法(hasErrors())时,你不能用null参数调用ThrowErrorIfExists。这与任何模拟没有任何关系,但它只是你方法中的一个错误。

使用匹配器调用方法

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

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

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

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

答案 1 :(得分:0)

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

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

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