近些日子写Junit测试比较多,接触Jmockit也有几个月了,但是都是间或用到,实际写的不是很多,而且也很模板化,没有太深入学习这个测试框架,今天感觉这个框架的API真的很丰富,功能很强大,因为暂时没有时间去深入挖掘,于是打算在这里先记录一些小的点,以备将来查用:)
1、Mocking protected Method in Superclass
基本上来说就是在Expectations块中声明一个父类变量,用该变量去调用要测试的方法即可。经实际测试可用。引自[url]code.google.com[/url]
2、 Mocking superclass protected variable using jmockit
如此可把TestClass中的static变量staticVar设置成2,但是如果该变量有final修饰则不能进行这样的操作。
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块中声明一个父类变量,用该变量去调用要测试的方法即可。经实际测试可用。引自[url]code.google.com[/url]
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修饰则不能进行这样的操作。