Mock测试
(1)引入jar包:jmockit-1.0.jar
(2)引入类:
import mockit.Mock;
import mockit.MockUp;
import mockit.Mockit;
(3)Mock方法:解决被测试代码调用的方法无法在单元测试环境下正常使用的问题。
@BeforeClass
public static void setUpBeforeClass()
throws Exception
{
new MockUp(){
@Mock
HttpServletResponse getResponse()
{
return new MockHttpServletResponse();
}
};
}
@AfterClass
public static void tearDownAfterClass()
throws Exception
{
//撤销jMock
Mockit.tearDownMocks();
}
以上代码Mock了ServletActionContext#getResponse()方法,在单元测试运行过程中,如果代码中有调用ServletActionContext#getResponse()方法,实际上会调用Mock出来的方法。其中,ServletActionContext是方法提供类,getResponse()是需要调用的方法。
如果需要重复Mock某个方法,一定要先调用Mockit.tearDownMocks()撤销原有的Mock。
注意:如果运行jMock出现下面的错误:
java.lang.IllegalStateException: Native library for Attach API not available in this JRE
这是由于环境配置的是JRE而不是JDK,JMock正常运行需要配置JDK,方法如下:
Eclipse-->Window-->Preferences-->Java-->Installed JREs
点击“Add”,添加JDK:
测试私有方法
如果某些方法是私有的,常规的测试无法覆盖私有方法,则采用下列方法进行测试:
Method m;
TestAction tAction = new TestAction();
m = tAction.getClass().getDeclaredMethod("testPrivateMethod");
m.setAccessible(true);
m.invoke(tAction);
以上代码测试了TestAction的私有方法testPrivateMethod()。