模拟超类方法调用

时间:2015-11-12 09:12:59

标签: java unit-testing junit mockito

我想测试一个扩展超类的类。我使用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不会有所帮助。

1 个答案:

答案 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();
    }
}