使用powermock模拟超级实现

时间:2014-11-14 09:25:25

标签: powermock

有没有Tom使用Powermock模拟一个类中的超级方法调用?

例如:

public void processRetrievedData() {
  super.processRetrievedData();
}

无论如何都要模拟“super.processRetrievedData()”?

谢谢,

Rajan的

2 个答案:

答案 0 :(得分:0)

这是一个可怕的想法和一个肮脏的黑客。

如果这是你考试对象的一部分,那么你永远不应该做这样的事情,因为你正在测试整个班级的行为而不仅仅是其中的一部分。

如果你真的需要做类似的事情,你可以扩展类并覆盖processRetrievedData方法,这样它就不会调用super - 就像你存根那个方法一样。

答案 1 :(得分:0)

虽然这是不好的做法,但有时候当你在没有选择的环境中工作时,你需要模拟继承。例如,我需要在Android中的Dialog Fragment中模拟超类方法来隔离我的单元测试。在您的情况下,在您的测试中使用......

@PrepareForTest(ChildClass.class)
public class ChildClassTest {
    @Test
    public void testMethod() {
        PowerMockito.suppress(PowerMockito.method(SuperClass.class, "processRetrievedData"))
        // Run method and test
    }
}

在MemberMatcher类下的API中列出了其他重载方法,这些方法在其他情况下很有用,例如,方法有参数,还有其他继承方法等。希望有所帮助。