Java UT用例实践记录

最近重构过程中在补充以前代码的用例,正好把UT用例的实践经验记录下来。

Redis打桩

很多程序都会使用redis管理缓存,UT用例需要解除对远端redis server的依赖,实现用例本地运行。上网找了一些资料加自己实践,推荐使用Embedded RedisServer。

maven

<dependency><groupId>it.ozimov</groupId><artifactId>embedded-redis</artifactId><version>0.7.2</version><scope>test</scope>
</dependency>

连接redis

JedisPool pool = new JedisPool("localhost", 6379);
Jedis jedis = pool.getResource();

然后就可以像连接标准redis server一样,使用jedis的各种命令来访问了。

jedis注入到代码

至于怎么将redis连接注入到代码,不同的代码差异较大,需要具体研究。常见的实现是通过静态方法拿到redis连接,所以我通过JMockit的能力来注入。

private void mock() {new Expectations(RedisUtil.class) {{Deencapsulation.invoke(RedisUtil.class, "getConnection");result = jedis;}};
}

JMockit实践经验

mock接口

例如我需要对HttpServletRequest进行打桩,可以直接用MockUp。

MockUp<HttpServletRequest> requestStub = new MockUp<HttpServletRequest>() {@Mockpublic String getParameter(String key) {return "";}
};
// 通过MockUp的getMockInstance()拿到被mock的interface实例
result = web.handle(requestStub.getMockInstance());

Springboot JUnit和JMockit冲突

在有些测试用例中,既想使用spring自动完成bean装载,又需要对程序运行时的依赖进行打桩。

@RunWith(SpringJUnit4ClassRunner.class)
public class AbcTest {private void mock() {new Expectations(RedisUtil.class) {{Deencapsulation.invoke(RedisUtil.class, "getConnection");result = jedis;}};}
}

mock方法中使用了JMockit的打桩功能,结果用例根本跑不起来,抛出下面的异常:

java.lang.IllegalStateException: JMockit wasn't properly initialized; please ensure that jmockit precedes junit in the runtime classpath, or use @RunWith(JMockit.class)

如果把@RunWith(JMockit.class)加上,则spring bean又无法自动装载了,真是两难。。。
搜索了很多资料,都没得到解决,最后参考这篇博客:http://www.mamicode.com/info-detail-181493.html的第二条,我仅仅在POM依赖中将JMockit放在JUnit之前,问题解决!详细原因没有继续分析。
最后附上我使用的jmockit和junit的版本号,供参考。

        <dependency><groupId>org.jmockit</groupId><artifactId>jmockit</artifactId><version>1.19</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

spring-boot的版本是2.1.3.RELEASE。

Java UT用例实践记录相关推荐

  1. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  2. java 8入门与实践_30个Java入门技巧和最佳实践

    java 8入门与实践 Java是最流行的编程语言之一-无论是Win应用程序,Web应用程序,移动,网络,消费电子产品,机顶盒设备,Java随处可见. 在Java上运行的设备超过30亿. 据Oracl ...

  3. java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习

    鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...

  4. 敏捷脑图用例实践之路

    原文在infoq已经发布,可以直接阅读:http://www.infoq.com/cn/articles/road-of-agile-mind-map-practice/ 传统的黑盒测试用例比较繁杂, ...

  5. 2021-02-28 SQL server实践记录---3Select

    SQL server实践记录---3Select 举例用相关表 各种Select语句 举例用相关表 CangKu[cangkuid, cangkuhao, chengshi, mianji, chua ...

  6. 高性能Java代码的最佳实践

    高性能Java代码的最佳实践 前言 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定 ...

  7. Java单元测试框架与实践(Junit5 + Mockito)

    Java单元测试框架与实践 本文首先在理论上归纳了单元测试在宏观和微观层面要遵循的基本原则,以及测试覆盖率的要求和评价维度.然后具体阐述了笔者实战中总结的基于Junit + Mockito 的单元测试 ...

  8. Linux环境下Arm端源码编译OpenCV+ncnn目标检测模型实例运行调试完整实践记录

    今天需要在嵌入式设备端运行C的程序,里面有依赖OpenCV的部分,这就需要编译安装好OpenCV才行,这个对于我来说还是比较陌生的,我很少用C,所以这里面也没少折腾,一路上遇上了很多的报错,这里我将完 ...

  9. 《程序设计教学法--以Java程序设计为例》

    <程序设计教学法--以Java程序设计为例> 当老师上的第一门课就是<Java程序设计>,工作以来,断断续续上了近十次课了吧.十几年来,教材.课程内容.教学方法.教学手段不断改 ...

最新文章

  1. 深度学习不work?这有一份超全的Debug检查清单
  2. 一文读懂序列建模(deeplearning.ai)之序列模型与注意力机制
  3. 《全栈性能Jmeter》-4JMeter脚本开发
  4. php处理json请求(php获取post请求的json数据的实现方法)
  5. 个人易遗忘的代码记录(6) 汉字转拼音
  6. JS+HTML画图的几种方法
  7. P3573-[POI2014]RAJ-Rally【拓扑排序,二分+树状数组】
  8. 学术科普 | 漫威电影中的智能大脑
  9. 一起学习C语言:C语言基本语法(二)
  10. iphone导出照片到电脑_假期即将结束,手机照片需要备份了!比 iTunes 更好用!...
  11. TensorFlow中数据读取—如何载入样本
  12. VS Code 神器插件:代码一键运行,支持超过 40 种语言!
  13. 管理感悟:你的能力是有限的
  14. HttpUtil 工具类
  15. 天正提示加载lisp_天正加载不了 - 卡饭网
  16. Java三大体系JavaSE、JavaEE、JavaME的区别
  17. 计算机主板不认硬盘怎么回事,主板sata接口不认硬盘怎么办
  18. visio导入阿里云和aws产品模具
  19. ExpRe[10] Ubuntu[2] 准备神秘软件、备份恢复软件
  20. Unity实战之打靶游戏

热门文章

  1. 服务器操作系统查询命令,服务器操作系统查询命令
  2. Ubuntu 21.04 如何进入命令行的登录界面
  3. SSH2远程连接例子
  4. 计算机登陆后如何防止自动注销,登录win10系统后自动注销的解决方法
  5. R可视化ggplot2绘制多子图
  6. windows debug tools
  7. 【数据可视化】复杂高维多元数据的可视化
  8. tSNE—高维数据降维可视化(理论部分)
  9. freetype 函数介绍
  10. IIC 通信协议 (二)