返回顶部

收藏

java unit test Mock框架jMockit示例教程 - 私有成员的Mock

更多

有时我们需要在测试mock对象前对某些成员变量进行初始化的设值,但是这些成员变量往往是私有的,有时某些方法的调用中会间接调用私有方法。 如何对这些私有变量或者私有方法进行mock呢?以下示例将示范这些用法。

package cn.outofmemory.jmockit.target;  

/** 
 * 示例一个公共方法内部调用了一个私有方法;示例私有成员变量的设值。 
 *  
 * @author Ginge 
 *  
 */  
public class InstanceInternalAccess {  
    private int memberCounts;  

    private int getMemberCounts() {  
        return this.memberCounts;  
    }  

    /** 
     * 把传入的count和内部定义的私有int类型的memberCounts的值相加,返回相加的结果。 
     *  
     * @param count 
     * @return 
     */  
    public int sumInternalCounts(int count) {  
        int myCount = this.getMemberCounts();  
        return myCount + count;  
    }  
}  

mock代码

package cn.outofmemory.jmockit.sample;  

import jmockit.target.InstanceInternalAccess;  
import junit.framework.Assert;  
import mockit.Expectations;  
import mockit.Mocked;  

import org.junit.Test;  

/** 
 * 有时我们需要在测试mock对象前对某些成员变量进行初始化的设值,但是这些成员变量往往是私有的,有时某些方法的调用中会间接调用私有方法。 
 * 如何对这些私有变量或者私有方法进行mock呢?以下示例将示范这些用法。 
 *  
 * @author Ginge 
 *  
 */  
public class PrivateAccessTest {  
    private @Mocked  
    InstanceInternalAccess instanceInternalAccess = null;  

    @Test  
    /* 
     * 对mock类型的私有成员变量进行设值的示例 
     */  
    public void privateAccessField() {  
        // 注意:这里使用了动态部分mock  
        new Expectations(instanceInternalAccess) {  
            {  
                // 对私有int类型的memberCounts进行设值  
                this.setField(instanceInternalAccess, "memberCounts", 2);  
            }  
        };  

        Assert.assertEquals(5, instanceInternalAccess.sumInternalCounts(3));  
    }  

    @Test  
    /* 
     * 对mock类型的私有成员方法进行mock的示例 
     */  
    public void privateAccessMethod() {  
        // 注意:这里使用了动态部分mock  
        new Expectations(instanceInternalAccess) {  
            {  
                // 对私有方法进行mock  
                this.invoke(instanceInternalAccess, "getMemberCounts");  
                result = 2;  
            }  
        };  

        Assert.assertEquals(5, instanceInternalAccess.sumInternalCounts(3));  
    }  
}  

标签:jMockit,jUnit,单元测试,Mock,java

收藏

0人收藏

支持

1

反对

0

发表评论