如何使用jmockit模拟私有类?

时间:2016-03-16 09:25:24

标签: java junit junit4 jmockit

public String processName() throws Exception {

    String name = dbManager.getName(); // getname
    String connection = dbManager.getConnection();
    String name2 = dbManager.getName();
    Mydata mydata = new Mydata();
    String getData = mydata.getGetData();
    List<String> list = dbManager.getList();
    return getData.toLowerCase();
}

private class Mydata {
    String getData = "test";

    public String getGetData() {
        return getData;
    }
    public void setGetData(String getData) {
        this.getData = getData;
    }
}

1 个答案:

答案 0 :(得分:0)

一般情况下,你不应该使用private类并避免为它们编写测试,因为它们应该是外部世界的black-boxes

但是如果你正在使用它并想要模拟它,那么你可以使用JMockit来实现它:

Object ins = Deencapsulation.newInnerInstance("Mydata", outerClass.class, (Object[]) null);

我使用过null,因为你没有在内部私有类中定义任何构造函数。

以下是您感兴趣的文档:

  

Object mockit.Deencapsulation.newInnerInstance(String   innerClassSimpleName,Object outerClassInstance,Object ...   nonNullArgs)

     

与newInstance(String,Class [],Object)相同,但是   实例化其他类的内部不可访问类,以及   已知所有其他(如果有)初始化参数   非空。

     

<强>参数:

     

innerClassSimpleName:   内部类简单名称,即&#34; $&#34;之后的部分。全名字符

     

outerClassInstance:   内部类实例将属于的外部类实例

     

nonNullArgs:   调用的零个或多个非空参数值;如果需要传递null值,则为Class对象   必须传递相应的参数类型而不是类型   返回的实例应该是可分配的

     

返回:新创建的指定内部类的实例,已初始化&gt;使用给定的参数

     

抛出: IllegalArgumentException - 如果为参数提供了空引用