[英]How to mock super reference (on super class)?
有时当我编写单元测试时,我应该模拟对超类的引用。
我读过这个问题: 问题
这个答案回答DI建议重构代码。 但我不能
如果超类方法足够大,这个答案另一个答案是不合适的。 在我的情况下,我有非常大的代码。 是的,我知道它是SOLID OOD原则,但我应该写测试。 我没有足够的时间进行重构。
4年前问了这个问题!
目前Mockito或Powermock可以解决此问题吗?
代码示例:
class BaseService {
public void save() {
// a lot of code here! I cannot change this code.
}
}
public Childservice extends BaseService {
public void save(){
//logic for testing
super.save();
//logic for testing
}
}
public class Parent {
public int save() {
return 99;
}
}
public class Child extends Parent {
public int save() {
int i = super.save();
return i*2;
}
}
并测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Parent.class)
public class ParentTest {
@Test
public void testSave() {
PowerMockito.suppress(PowerMockito.methodsDeclaredIn(Parent.class));
System.out.println(new Child().save());
}
}
输出:198
使用Powermock,您可以替换或抑制方法,因此可以更改BaseService.save()
完成的操作。 您也可以使方法无法抑制。 您甚至可以抑制静态初始化程序块。
请阅读Powermock作者的博客文章 。 请参阅“更换”一章。
更新:
抑制似乎对我有用,但不能替换。 见下图:
这是不可能的; 超类的全部意义在于它封装了上游状态和功能,并且类层次结构基于extends
关系在子类中进行了硬编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.