如何测试受保护的方法

时间:2013-09-24 02:35:51

标签: java junit easymock powermock

如果类的构造函数受到保护,那么当我执行测试用例时,我该怎么做才能使用EasyMock或PowerMock构建对象。这是我的源代码:

protected TibOperationProxy(SAPApplication sdkApp, String classRef, String getOperationName, String rpcRef,  SAPReqRespImpl sapClient) 
throws MException {
    super(sdkApp, classRef, getOperationName, rpcRef);
    this.sdkApp = sdkApp;
    this.client = sapClient;
}

2 个答案:

答案 0 :(得分:2)

您有powerMock whitebox类可以提供帮助:

TibOperationProxy proxy = org.powermock.reflect.Whitebox.invokeConstructor(TibOperationProxy.class, sdkApp, classRef, getOperationName, rpcRef, sapClient);

一个额外的样本,假设我们有这个类:

public class WhiteBoxTest {
    private final String name;
    private WhiteBoxTest (String name) {
        this.name = name;
    }
    public String getName () {
        return this.name;
    }
}

另一个类的主要方法有效:

 WhiteBoxTest whitebox = Whitebox.invokeConstructor (WhiteBoxTest.class,
            new Class[] { String.class }, new Object[] { "hello world" });
 System.out.println (whitebox.getName ());

答案 1 :(得分:2)

如果类具有受保护的构造函数,则该构造函数仅用于派生类。也许这个类是一个抽象类?为什么不只有一个测试派生类?