java打桩_使用JUnit4与JMockit进行打桩测试

1. 何为Mock

项目中各个模块,各个类之间会有互相依赖的关系,在单元测试中,我们只关心被测试的单元,对于其依赖的单元并不关心(会有另外针对该单元的测试)。

比如,逻辑层A类依赖了数据访问层B类的取数方法,然后进行逻辑处理。在对A的单元测试中,我们关注的是在B返回不同的查询结果的时候,A是怎么处理的,而不是B到底是怎么取的数,如何封装成一个模型等等。

因此,要屏蔽掉这些外部依赖,而Mock让我们有了一套仿真的环境。

目前业界有几种Mock,这里选用最全面的JMockit进行总结。

2. JMockit简介

JMockit的工作原理是通过asm修改原有class的字节码,再利用jdk的instrument机制替换现有class的内容,从而达到mock的目的。

这里使用的JMockit是1.21版本,具体使用方法可能与其他版本的不一样,但思想是相通的。Maven 配置如下:

org.jmockit

jmockit

1.21

test

JMockit有两种测试方式,一种是基于行为的,一种是基于状态的测试。

1) Behavior-oriented(Expectations & Verifications)

2)State-oriented(MockUp)

通俗点讲,Behavior-oriented是基于行为的mock,对mock目标代码的行为进行模仿,更像黑盒测试。State-oriented 是基于状态的mock,是站在目标测试代码内部的。可以对传入的参数进行检查、匹配,才返回某些结果,类似白盒。而State-oriented的 new MockUp基本上可以mock任何代码或逻辑。

假设现在有两个类,Service和DAO.  Service通过数据库查询出不同分组货物的数量,得到货物是否畅销。

1 packagecom.khlin.test.junit.jmockit.demo;2

3 public classService {4

5 privateDAO dao;6

7 public voidsetDao(DAO dao) {8 this.dao =dao;9 }10

11 /**

12 * 根据存货量判断货物是否畅销13 *@paramgroup14 *@return

15 */

16 publicStatus checkStatus(String group) {17 int count = this.dao.getStoreCount(group);18

19 if (count <= 0) {20 returnStatus.UNKOWN;21 } else if (count <= 800) {22 returnStatus.UNSALABLE;23 } else if (count <= 1000) {24 returnStatus.NORMAL;25 } else{26 returnStatus.SELLINGWELL;27 }28 }29 }

1 packagecom.khlin.test.junit.jmockit.demo;2

3 importjava.util.HashMap;4 importjava.util.Map;5

6 public classDAO {7

8 private Map groupCounts = new HashMap();9

10 /**

11 * 假数据12 */

13 {14 this.groupCounts.put("A", 500);15 this.groupCounts.put("B", 1000);16 this.groupCounts.put("C", 1200);17 }18

19 public intgetStoreCount(String group) {20 Integer count = this.groupCounts.get(group);21

22 return null == count ? -1: count.intValue();23 }24 }

1 packagecom.khlin.test.junit.jmockit.demo;2

3 public enumStatus {4

5 /**

6 * 畅销7 */

8 SELLINGWELL,9 /**

10 * 一般11 */

12 NORMAL,13 /**

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值