我遇到问题,Mockito尝试在存根时调用真正的方法。我假设这可能与该方法的继承有关。 这是我系统外部的组件,不能做很多事情。但是,让我们来看看代码
AbstractRpcClient abstractRpcClient = mock(AbstractRpcClient.class);
doNothing().when(abstractRpcClient).callOnce(anyString(), anyVararg());
由于callOnce
调用某些其他对象上的方法,因此我在第二行中获得了NPE。
AbstractRpcClient
继承自另一个抽象类,但是这个类是本地包,所以我甚至无法将其转换为我的存根。
我能做些什么吗?如何在不调用实际方法的情况下将此方法无效或抛出异常。
我是否必须在测试和覆盖方法callOnce
中扩展此类?这当然有效,但还有其他解决方案吗?
最小例子:
package external.component;
public abstract class ClassToMock extends SuperClass {
}
abstract class SuperClass {
public void callOnce(String method, Object... params) {
throw new RuntimeException("We shouldn't be here");
}
}
测试课
package mypackage
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyVararg;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
public class Testclass {
@Test
public void test() {
external.component.ClassToMock classToMock = mock(external.component.ClassToMock.class);
doNothing().when(classToMock).callOnce(anyString(), anyVararg());
}
}
当然,RuntimeException
方法会抛出callOnce
。
答案 0 :(得分:1)
它看起来像Mockito中的bug,实际上它已经被报道并且应该在一年前修复:
https://github.com/mockito/mockito/issues/168
我在版本1.9.5和最近的1.10.19中获得相同(损坏)的行为。
我建议你用Mockito提出错误。
作为临时解决方案,有几个选择:
public void callOnce() { super.callOnce(); }