论坛首页 Java企业应用论坛

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

浏览 3041 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (11)
作者 正文
   发表时间:2010-12-13  

目标测试代码

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

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics