单元测试mock:用JMockit写单元测试实例,mockjmockit,在最近刚结束的接口开发项
分享于 点击 43102 次 点评:143
单元测试mock:用JMockit写单元测试实例,mockjmockit,在最近刚结束的接口开发项
在最近刚结束的接口开发项目中,由于和三方合作同时并行开发,所以开发过程中调用到第三方时,而此时第三方的接口还未实现,这时候我们要进行单元测试时,需要进行mock操作,本次项目就是以JMockit框架来完成单元测试的。
JMockit 是一个轻量级的mock框架是用以帮助开发人员编写测试程序的一组工具和API,该项目完全基于 Java 5 SE 的 java.lang.instrument 包开发,内部使用 ASM 库来修改Java的Bytecode。
其使用方法也比较简单,以下就是具体的例子。
需要引用到的jar包:test.jmockit-0.998.jar 和 test.junit-4.5.jar
1、被测的方法doMyNumberProfile,该方法中调用到第三方接口updateNumberProfile。
package com.test.service.impl; /** * 类名:<br> * 类说明:<br> * * @version V1.0 * @author lu7kang 2011-3-31 */ public class MyServiceImpl implements MyService { private ESPService service; public EFaxResult doMyNumberProfile(NumberProfile numberProfile, String memberId){ EFaxResult rst = new EFaxResult(ResultCode.RC_100); //非空验证 validateNotEmpty(rst, "numberProfile", numberProfile); validateNotEmpty(rst, "memberId", mainMemberId); if(rst.getResultCode()!=ResultCode.RC_100) return rst; . . . .(省略) . . try { // 调用第三方接口 rst = service.updateNumberProfile(numberProfile, memberId); . . . .(省略) . . } catch (Exception e) { LOG.error(e); rst.setResultCode(ResultCode.RC_101); rst.setReturnObject(e.getMessage()); } return rst; } }
2、测试类,测试本地写好的doMyNumberProfile方法。其中第三方的updateNumberProfile方法是mock的。
package com.test; import mockit.MockUp; import org.junit.Test; import junit.framework.TestCase; /** * 类名:<br> * 类说明:<br> * * @version V1.0 * @author lu7kang 2011-3-31 */ public class MyTestCase extends TestCase { @Test public void test() throws Exception{ // mock第三方接口方法-返回成功 MockUp mu3 = new MockUp<ESPService>() { @Mock public EFaxResult updateNumberProfile(NumberProfile numberProfile, String memberId) { EFaxResult rst = new EFaxResult(); // mock第三方方法-返回成功100 rst.setResultCode(ResultCode.RC_100); return rst; } }; // 测试本地代码 MyService myservice = new MyServiceImpl(); NumberProfile numberProfile = new NumberProfile(); String memberId = "test_id"; // 测试自己的方法 rst = myservice.doMyNumberProfile(numberProfile, memberId); Assert.assertEquals(ResultCode.RC_100, rst.getResultCode()); } }
总结使用mock测试的几点好处:
能够帮助我们解耦设计,即以接口设计为中心。在使用其他对象的情况。通过为mock设置期望的行为,可以验证我们的代码是否正确。使你的测试运行的更快。通过mock数据库,通等接口,我们可以避免耗时的连接。可以推迟我们要实现的类。因为我们可以通过mock去模拟接口的实现,所以前期我们可以不用现实现接口。可以测试那些不太容易发生,不太可能和一些异常情况,比如我们可以mock 抛出Exception。
用户点评