模拟公共或受保护的方法如何从超类继承?

时间:2015-05-26 07:19:32

标签: mocking mockito powermock

下面的代码显示了在类Sub中测试的方法 - 因此 我不需要嘲笑班级Sub。但是,我想嘲笑 Super类和getSuperData方法。有没有办法使用 的Mockito / Powermock? 我也想知道是否有嘲弄Super构造函数的方法? 谢谢, 史蒂夫

public class Super {
    private String data;
    public Super() {
    }
    public String getSuperData() {
        return data;
    }
}

public class Sub extends Super {
    Sub() {
        super();
    }
    public String methodToTest() {
        ...
        String data = getSuperData();
        ...
    }
}

public class TestSub {
    Sub sub = new Sub();
    Super superMock = Mockito.mock(Super.class);
    Mockito.when(superMock.getSuperData()).thenReturn("data");
}

1 个答案:

答案 0 :(得分:0)

这是可能的,但它需要你监视你的对象:

public class TestSub {
    Sub sub = Mockito.spy(Sub.class);
    Mockito.when(superMock.getSuperData()).thenReturn("data");
    sub.methodToTest();
}

这样你就嘲笑了超级方法,因为间谍允许你模拟方法。然而,间谍的优势在于,对于未模拟的方法,它将调用真正的实现。因此sub.methodToTest()调用仍然会调用实际的实现。

关于你的第二个子问题,我知道PowerMock能够模拟一个构造函数,但我不确定在这种情况下它是否可行。如果你想在构造函数中模拟某些语句,最好将它们委托给一个新方法,然后模拟这个方法。