用JMockit写单元测试
来源:互联网 发布:js原生打开新页面 编辑:程序博客网 时间:2024/06/02 10:25
文字介绍:
Mock 测试是一种常见的测试方法。通常在执行测试的时候,测试代码往往需要与一些真实对象进行交互,又或者被测代码的执行需要依赖真实对象的功能。此时,我们可以使用一个轻量级的、可控制的Mock对象来取代真实对象,模拟真实对象的行为和功能,从而方便我们测试。jMock便是这种方法的一种实现。JMock 是一个利用Mock对象来测试Java代码的轻量级测试工具。毫不例外,它也是xUnit家族的一员,因为它从JUnit发展而来,是JUnit的一个增强库。jMock用法简单,易于掌握。利用它,我们可以很容易地快速构造出所需的Mock对象,从而得以方便快捷地编写单元测试代码,很适合测试驱动开发的流畅进行。
我遇到的例子,上代码:
public class InnerCustomerInfoServiceTest extends BaseServiceTest { @SpringBeanByType InnerCustomerInfoService innerCustomerInfoService;//由spring bean注入接口的实现类 //... /** * 参数对应返回为NULL的逻辑判断 */ @Test public void test1_FindCustomerInfo() { new MockUp<IbatisCustomerInfoDAO>() {//说明1 @Mock CustomerInfoDO findCustomerInfo(long customerId) { want.number(customerId).isEqualTo(2); return null; } }; CustomerInfoDO entity = innerCustomerInfoService.findCustomerInfo(2);//此处的方法调用代码,见说明1 Assert.assertTrue(entity == null); } /** * 第一次就正确找到参数对应的值的逻辑测试 */ @Test public void test2_findCustomerInfoByKpId() { new MockUp<IbatisCustomerInfoDAO>() { @Mock CustomerInfoDO findCustomerInfoByKpId(long kpId) { want.number(kpId).isEqualTo(1); CustomerInfoDO tmpDO = new CustomerInfoDO(); tmpDO.setCustomerRank(2); return tmpDO; } }; CustomerInfoDO entity = innerCustomerInfoService.findCustomerInfoByKpId(1); want.number(entity.getCustomerRank()).isEqualTo(2);//说明2 } /** * 第一次没找到对应值 补全后正确找到参数对应的值的逻辑测试 */ @Test public void test3_findCustomerInfoByKpId() { new MockUp<IbatisCustomerInfoDAO>() { @Mock CustomerInfoDO findCustomerInfoByKpId(long kpId) { want.number(kpId).isEqualTo(1); return null; } }; new MockUp<InnerCustomerInfoServiceImpl>() {//说明3 @Mock CustomerInfoDO createNewCustomerInfoByKpId(long kpId) { want.number(kpId).isEqualTo(1); CustomerInfoDO tmpDO = new CustomerInfoDO(); tmpDO.setCustomerRank(2); return tmpDO; } }; CustomerInfoDO entity = innerCustomerInfoService.findCustomerInfoByKpId(1); want.number(entity.getCustomerRank()).isEqualTo(2); } //...}
说明:
1. new MockUp<IbatisCustomerInfoDAO>,为什么是IbatisCustomerInfoDAO?说明需要模拟IbatisCustomerInfoDAO这个对象。方法调用的代码实现:
public class InnerCustomerInfoServiceImpl implements InnerCustomerInfoService { private static final Log log = LogFactory.getLog(InnerCustomerInfoServiceImpl.class); @Autowired private CustomerInfoDAO customerInfoDAO; @Override public CustomerInfoDO findCustomerInfo(long customerId) { if (customerId <= 0) { log.error("param error,customerId is: " + customerId); return null; } return customerInfoDAO.findCustomerInfo(customerId);//此处用到了CustomerInfoDAO接口对象,故需要进行模拟, //说明1模拟了其实现类IbatisCustomerInfoDAO的对象 } //...}2. want的意思?想想上面的Assert.assertTrue..
3. 两个mock?说明用到了两个对象,需要模拟两个对象。具体代码和说明1雷同。其实很简单,照葫芦画瓢即可!
4.关于使用JMock需要导入的Jar包?本例中已经由Maven同一配置管理了,在jtester里,pom.xm相关部分如下图:
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version></dependency><dependency><groupId>com.NB.jtester</groupId><artifactId>jtester.junit</artifactId><version>${jtester_version}</version></dependency><dependency><groupId>com.NB.jtester</groupId><artifactId>jtester.integrated</artifactId><version>${jtester_version}</version></dependency><dependency><groupId>com.NB.jtester</groupId><artifactId>jtester.spec</artifactId><version>${jtester_version}</version></dependency>
官方地址:
http://jmock.org/
- 用JMockit写单元测试
- 单元测试mock:用JMockit写单元测试实例
- JUnit+JMockit单元测试
- junit 加Jmockit单元测试
- JUnit+JMockit单元测试
- 使用JMockit编写java单元测试
- 使用JMockit编写java单元测试
- 单元测试mock框架——jmockit实战
- 单元测试mock框架——jmockit实战
- 使用Junit4和JMockit进行单元测试
- 单元测试mock框架——jmockit实战
- 用DBUnit写单元测试
- Jmockit
- jmockit
- jmockit
- JMockit
- jmockit
- JMockit
- OpenCV的行人识别&人脸识别
- 微信迎来重量级挑战者:易信
- 49. 面向对象的LotusScript(十五)之Log4Dom下
- 离散三维数据场一阶、高阶、hessian matrix、曲率计算
- 线性时间内筛素数+欧拉函数+莫比乌斯函数
- 用JMockit写单元测试
- 题目1523:从上往下打印二叉树-九度
- windows phone 截屏
- shell 编程学习笔记 (三)
- struts2+spring+hibernate整合写的项目怎么实现分页功能
- C/C++ 中static关键字详解
- HDU 3071 Gcd & Lcm game
- 6410之输入子系统(2)
- android 颜色收集及部分gridview样式设置