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

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

来源: javaer 分享于  点击 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));      }  }  
相关栏目:

用户点评