我有以下课程:
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,因为任何简单的方法都可以返回任何内容?
答案 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()
不是一种只为您创建对象的方法。