有时,当我编写单元测试时,我应该模拟对超类的引用。
我已阅读以下问题:问题
这个答案与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作者的博客条目。请参见“更换”一章。
更新:
抑制似乎对我有用,但是请不要使用。见下图:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句