【问题标题】:How mock public or protected method inherited from a superclass?如何模拟从超类继承的公共或受保护方法?
【发布时间】:2015-05-26 07:19:32
【问题描述】:

下面的代码显示了在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");
}

【问题讨论】:

标签: mocking mockito powermock


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2015-07-14
    • 2015-05-16
    • 2019-08-24
    相关资源
    最近更新 更多