2015-06-20 06:30:01
阅读( 296 )
有时我们需要在测试mock对象前对某些静态成员变量进行初始化的设值,但是这些静态成员变量往往是私有的,有时某些方法的调用中会间接调用静态私有方法。 如何对这些静态私有变量或者静态私有方法进行mock呢?以下示例将示范这些用法 。
package cn.outofmemory.jmockit.target;
public class StaticAccess {
private static int memberCounts;
private static int getMemberCounts() {
return memberCounts;
}
/**
* 把传入的count和内部定义的私有int类型的memberCounts的值相加,返回相加的结果。
*
* @param count
* @return
*/
public static int sumInternalCounts(int count) {
int myCount = getMemberCounts();
return myCount + count;
}
}
package cn.outofmemory.jmockit.sample;
import jmockit.target.StaticAccess;
import junit.framework.Assert;
import mockit.Expectations;
import org.junit.Test;
/**
* 有时我们需要在测试mock对象前对某些静态成员变量进行初始化的设值,但是这些静态成员变量往往是私有的,有时某些方法的调用中会间接调用静态私有方法。
* 如何对这些静态私有变量或者静态私有方法进行mock呢?以下示例将示范这些用法
*
* @author Ginge
*
*/
public class StaticAccessTest {
@Test
/*
* 对mock类型的静态私有成员变量进行设值的示例
*/
public void privateAccessField() {
// 注意:这里使用了动态部分mock
new Expectations(StaticAccess.class) {
{
// 对私有int类型的memberCounts进行设值
this.setField(StaticAccess.class, "memberCounts", 2);
}
};
Assert.assertEquals(5, StaticAccess.sumInternalCounts(3));
}
@Test
/*
* 对mock类型的静态私有成员方法进行mock的示例
*/
public void privateAccessMethod() {
// 注意:这里使用了动态部分mock
new Expectations(StaticAccess.class) {
{
// 对私有方法进行mock
this.invoke(StaticAccess.class, "getMemberCounts");
result = 2;
}
};
Assert.assertEquals(5, StaticAccess.sumInternalCounts(3));
}
@Test
/*
* 直接对整个静态方法进行mock
*/
public void staticAccessMethod() {
// 注意:这里使用了动态部分mock
new Expectations(StaticAccess.class) {
{
StaticAccess.sumInternalCounts(3);
result = 7;
}
};
Assert.assertEquals(7, StaticAccess.sumInternalCounts(3));
}
}
分享给朋友:
亲~ 如果您有更好的答案 可在评论区发表您独到的见解。
您想查看更多的信息:
面试题