【发布时间】:2014-05-26 08:07:33
【问题描述】:
有时当我编写单元测试时,我应该模拟对超类的引用。
我读过这个问题: question
这个答案answer with DI 建议重构代码。但我做不到
如果超类方法足够大,这个答案another answer 不适合。就我而言,我有非常大的代码。是的,我知道它违反了 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
【问题讨论】:
-
能否编个代码示例进行测试?这将有助于回答您的问题。
-
@Gábor Lipták 请阅读更新
-
你能告诉我为什么你的问题不能通过解决方案“DI”的答案来解决吗?你的代码有什么特别的地方吗?
-
我无法更改此代码
标签: java unit-testing mocking super powermock