单元测试mock:用JMockit写单元测试实例

本文介绍如何使用JMockit框架进行单元测试,特别是在与第三方接口交互时如何进行mock操作。通过具体示例展示了如何设置mock行为以验证本地代码的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在最近刚结束的接口开发项目中,由于和三方合作同时并行开发,所以开发过程中调用到第三方时,而此时第三方的接口还未实现,这时候我们要进行单元测试时,需要进行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测试的几点好处:

a、能够帮助我们解耦设计,即以接口设计为中心。

b、在使用其他对象的情况。通过为mock设置期望的行为,可以验证我们的代码是否正确。

c、使你的测试运行的更快。通过mock数据库,通等接口,我们可以避免耗时的连接。

d、可以推迟我们要实现的类。因为我们可以通过mock去模拟接口的实现,所以前期我们可以不用现实现接口。

e、可以测试那些不太容易发生,不太可能和一些异常情况,比如我们可以mock 抛出Exception。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值