我想测试一个扩展超类的类。我使用JUnit和Mockito。在一个方法中,这个类调用超类的超级方法:
@Override
public void init(String input){
super.init();
...
}
现在在我的测试班中,我已经有了以下设置:
@InjectMocks
private MyClass classUnderTest = new MyClass();
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
现在如何模拟super.method
电话?在这种情况下,我认为Spying不会有所帮助。
答案 0 :(得分:1)
你不应该嘲笑这个电话。你根本不应该继承遗产。如果班级A
需要调用在其他地方进行过测试的方法b()
并且您不关心它的作用,则意味着方法b()
应该在班级B
中}这是类A
的依赖项 - 然后你可以执行依赖注入和模拟B
。
如果这是一些您无法更改的遗留代码,重构它的一个有趣策略是在类A
中创建一个新方法并在测试中覆盖它(通过扩展A
或间谍关于这种方法):
class A extends B {
private void b() {
// something here
super_b();
}
protected void super_b() {
super.b();
}
}