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()。