我有以下类:
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来触发"什么都不做"。