Jmockit: Mock父类中的protected方法/变量

近些日子写Junit测试比较多,接触Jmockit也有几个月了,但是都是间或用到,实际写的不是很多,而且也很模板化,没有太深入学习这个测试框架,今天感觉这个框架的API真的很丰富,功能很强大,因为暂时没有时间去深入挖掘,于是打算在这里先记录一些小的点,以备将来查用:)

1、Mocking protected Method in Superclass

package org.jdesktop.animation.timing.triggers;

import javax.swing.*;

import org.junit.*;

import mockit.*;

import static org.junit.Assert.*;

public final class ActionTriggerTest
{
   @Test
   public void testAddTrigger()
   {
      AbstractButton button = new JButton("Test");

      ActionTrigger trigger = ActionTrigger.addTrigger(button, null);

      assertSame(trigger, button.getActionListeners()[0]);
   }

   @Test(expected = IllegalArgumentException.class)
   public void testAddTriggerFailsOnObjectWithoutAddActionListenerMethod()
   {
      ActionTrigger.addTrigger(new Object(), null);
   }

   @Test
   public void testActionPerformed()
   {
      ActionTrigger actionTrigger = new ActionTrigger(null);

      new Expectations()
      {
         Trigger trigger;

         {
            trigger.fire();
         }
      };

      actionTrigger.actionPerformed(null);
   }
}


基本上来说就是在Expectations块中声明一个父类变量,用该变量去调用要测试的方法即可。经实际测试可用。引自 code.google.com


2、 Mocking superclass protected variable using jmockit

@Test 
public void testMockStaticVar() {
    TestClass testclass = new TestClass();
    Deencapsulation.setField(TestClass .class, "staticVar", 2);
    //...
}


如此可把TestClass中的static变量staticVar设置成2,但是如果该变量有final修饰则不能进行这样的操作。

你可能感兴趣的:(jmockit)