java unit test Mock框架jMockit示例教程 - 私有静态成员Mock,mockjmockit,有时我们需要在测试moc
分享于 点击 9110 次 点评:179
java unit test Mock框架jMockit示例教程 - 私有静态成员Mock,mockjmockit,有时我们需要在测试moc
有时我们需要在测试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)); } }
用户点评