欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java unit test Mock框架jMockit示例教程 - 私有成员的Mock,mockjmockit,有时我们需要在测试moc

来源: javaer 分享于  点击 48112 次 点评:142

java unit test Mock框架jMockit示例教程 - 私有成员的Mock,mockjmockit,有时我们需要在测试moc


有时我们需要在测试mock对象前对某些成员变量进行初始化的设值,但是这些成员变量往往是私有的,有时某些方法的调用中会间接调用私有方法。 如何对这些私有变量或者私有方法进行mock呢?以下示例将示范这些用法。

package cn.outofmemory.jmockit.target;  /**  * 示例一个公共方法内部调用了一个私有方法;示例私有成员变量的设值。  *   * @author Ginge  *   */  public class InstanceInternalAccess {      private int memberCounts;      private int getMemberCounts() {          return this.memberCounts;      }      /**      * 把传入的count和内部定义的私有int类型的memberCounts的值相加,返回相加的结果。      *       * @param count      * @return      */      public int sumInternalCounts(int count) {          int myCount = this.getMemberCounts();          return myCount + count;      }  }  

mock代码

package cn.outofmemory.jmockit.sample;  import jmockit.target.InstanceInternalAccess;  import junit.framework.Assert;  import mockit.Expectations;  import mockit.Mocked;  import org.junit.Test;  /**  * 有时我们需要在测试mock对象前对某些成员变量进行初始化的设值,但是这些成员变量往往是私有的,有时某些方法的调用中会间接调用私有方法。  * 如何对这些私有变量或者私有方法进行mock呢?以下示例将示范这些用法。  *   * @author Ginge  *   */  public class PrivateAccessTest {      private @Mocked      InstanceInternalAccess instanceInternalAccess = null;      @Test      /*      * 对mock类型的私有成员变量进行设值的示例      */      public void privateAccessField() {          // 注意:这里使用了动态部分mock          new Expectations(instanceInternalAccess) {              {                  // 对私有int类型的memberCounts进行设值                  this.setField(instanceInternalAccess, "memberCounts", 2);              }          };          Assert.assertEquals(5, instanceInternalAccess.sumInternalCounts(3));      }      @Test      /*      * 对mock类型的私有成员方法进行mock的示例      */      public void privateAccessMethod() {          // 注意:这里使用了动态部分mock          new Expectations(instanceInternalAccess) {              {                  // 对私有方法进行mock                  this.invoke(instanceInternalAccess, "getMemberCounts");                  result = 2;              }          };          Assert.assertEquals(5, instanceInternalAccess.sumInternalCounts(3));      }  }  
相关栏目:

用户点评