Mockito在存根时从超类调用真实方法

皮特

我遇到了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方法抛出的

雅罗斯瓦夫(Jaroslaw Pawlak)

它看起来像Mockito中的bug,实际上已经被报告,并且应该在一年前就已修复:

https://github.com/mockito/mockito/issues/168

我在1.9.5版和最新的1.10.19版中得到了相同的(中断)行为。

我建议您使用Mockito引发该错误。

作为临时的解决方法,有几种选择:

  • 公开课
  • 添加public void callOnce() { super.callOnce(); }子类

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在存根上调用真实方法

来自分类Dev

首次调用存根方法后,Mockito存根消失

来自分类Dev

Mockito-存根超级(抽象)类方法

来自分类Dev

从超类调用方法

来自分类Dev

从超类调用方法

来自分类Dev

从超类的超类调用方法

来自分类Dev

存根所有在类上调用的方法

来自分类Dev

调用超类的__init__方法时发生TypeError

来自分类Dev

在调用方法时获取扩展超类的子类实例

来自分类Dev

调用超类构造函数和方法时的异常处理

来自分类Dev

在调用方法时获取扩展超类的子类实例

来自分类Dev

调用超类的__init__方法时发生TypeError

来自分类Dev

当对象调用其超类的方法时如何处理?

来自分类Dev

当子类调用超类的方法时,如何获得超类来引用子类中的属性?

来自分类Dev

模拟超类方法调用

来自分类Dev

调用超类方法operator ==

来自分类Dev

Clojure:调用超类方法

来自分类Dev

Mockito存根无效方法

来自分类Dev

Mockito存根无效方法

来自分类Dev

如何对Mockito测试的类的私有方法进行存根

来自分类Dev

在子类的方法中本地调用超类方法时,使用“ super”关键字还是使用超类实例?

来自分类Dev

Mockito doReturn /执行真实方法时(不使用CGILIB)

来自分类Dev

模拟方法之外的Mockito存根

来自分类Dev

使用Mockito存根最终方法

来自分类Dev

Mockito无法运行存根方法

来自分类Dev

使用 mockito 存根 void 方法

来自分类Dev

尝试从程序的主方法调用超类方法时生成错误

来自分类Dev

从子类调用超类的方法

来自分类Dev

NSNotificationCenter从超类还是子类调用方法?