微信

使用微信服务,更方便

职友集>Java面试题 > java unit test Mock框架jMockit示例教程 - 私有静态成员Mock

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

2015-06-20 06:30:01 阅读( 296 )

2361人 收藏本页

标签:Java面试题

有时我们需要在测试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));
}
}

下一篇:java使用Runtime和Process类执行外部程序

上一篇:java编程思想概括(第五章)---隐藏具体实现

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题