有时,当我编写单元测试时,我应该模拟对父类(super class)的引用。
我读过这个问题: question
这个答案answer with DI重构代码的建议。但是我做不到
这个答案 another answer如果父类(super class)方法足够大,则不适合。就我而言,我有非常大的代码。是的,我知道它违反了 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
}
}
更新2
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()
完成的操作。您还可以创建不对抑制执行任何操作的方法。您甚至可以抑制静态初始化程序 block 。
请阅读this blog entry of the Powermock authors .请参阅“替换”一章。
更新:
抑制似乎对我有用,但替换不行。见下图:
关于java - 如何模拟 super 引用(在 super 类上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865555/