`
ginge
  • 浏览: 208394 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jmockit 的使用示例-07私有静态成员Mock

阅读更多

目标测试代码

package 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;
	}

}

 

Mock代码

package 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));
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics