Java Mockito如何仅模拟超类方法的调用

我在某些测试中使用Mockito。

我有以下课程:

class BaseService {  

public void save() {...}

}

public Childservice extends BaseService {

public void save(){

//some code

super.save();

}

}

我只想模拟的第二个调用(super.save)ChildService。第一次调用必须调用real方法。有没有办法做到这一点?

回答:

Mockito不支持此功能。

这可能不是你要寻找的答案,但是你看到的是不采用设计原则的症状:

偏重于继承而不是继承

如果你提取策略而不是扩展超类,那么问题就不存在了。

但是,如果不允许你更改代码,但无论如何都必须对其进行测试,并且以这种尴尬的方式仍然存在希望。使用某些AOP工具(例如AspectJ),你可以将代码编织到超类方法中,而完全避免执行(糟糕)。如果使用代理,这将不起作用,则必须使用字节码修改(加载时编织或编译时编织)。也有支持这种技巧的模拟框架,例如PowerMock和PowerMockito。

我建议你进行重构,但是如果这不是一种选择,那么你将获得一些严肃的黑客乐趣。

以上是 Java Mockito如何仅模拟超类方法的调用 的全部内容, 来源链接: utcz.com/qa/431731.html

回到顶部