单元测试与Mockito
1、什么是单元测试?
顾名思义单元测试就是对软件系统中最小的单元(函数、类)做测试,类似焊接电路板前对每个电容器(电子元器件)的测试。从软件测试分级来看,单元测试是最底层也是离程序员最近的一层,一般由开发人员负责完成,是软件质量最基础的保证。当然单元测试的最终受益者也还是程序员,坚持编写单元测试代码不但可以提高程序质量减少BUG,还可以辅助其他程序员阅读已有代码,提升开发效率等等。

2、为什么我们都不够重视单元测试?
我相信每一个负责任的程序员都是非常重视单元测试的。当我们在新加、修改了某一个功能或某一段代码后一般都会调试和自测,拿Web后台开发来说,每个接口肯定都是开发人员在本机上调试过的(一般喜欢用post工具),然而我们不重视的是什么呢?是对这种自测流程的固化。
试想某天你接到一个新需求:要新增一个功能A,需要用到公共服务F,分析/构思、编码、编译/构建/部署、调试/自测一顿行云流水的操作后我们提测并顺利上线了。一段时间后公共服务F修改了实现逻辑,通知你可能需要做相应的修改.....什么?A里面可是有100个接口用到了F,难道我要一个一个去检查哪些被影响到了吗?..emm....是的,真的要一个一个检查,这个时候我们就要想了有没有什么自动化测试的工具能够一遍就帮我们检查完呢?有的:编写单元测试代码。
那么是什么原因引起我们不够重视单元测试呢?首先是公司的价值导向,是以业务支撑为主要KPI还是以交付质量等决定了项目经理、架构师以至程序员愿意为单元测试付出的精力和时间;其次是项目性质,相对后台项目来讲前台项目确实是不容易实现单元测试;还有就是需求的重要程度和开发周期也决定了程序员是否愿意花更多额外的时间去编写测试代码。
3、车险项目单元测试
不同的编程语言有不同的UT框架,拿Java来说,主要有JUnit和TestNG两大框架,同时也有很多的Mock和辅助工具。

在车险项目中,单元测试框架我们选型了JUnit配合spring-test,Mock框架采用了Mockito,同时数据库采用了H2嵌入式数据库,以及jsonassert和json-path等工具包。
单元测试的原则:所有的核心代码都必须编写单元测试
据说楼上的Accenture某些项目要求单元测试的行覆盖率达到99%,分支覆盖率达到90%

4、一些常见问题
1)mockMvc.perform时filter不起作用,导致程序获取不到模拟的登陆session
l 增加HandlerInterceptorAdapter,在preHandle中手动调用web.xml中配置的filter。
l 后面发现AbstractMockMvcBuilder提供了配置filter的API,直接添加就可了。
Mockito未去代理时无法mock的问题
Mockito主线程结束时,子线程被终止
(异步接口不起作用)
单元测试与Mockito的更多相关文章
- 单元测试利器Mockito框架
什么是Mock Mock 的中文译为仿制的,模拟的,虚假的.对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去. Mock 测试就是在测试过程中,对于某些 不容易构造(如 Ht ...
- 单元测试 - SpringBoot2+Mockito实战
单元测试 - SpringBoot2+Mockito实战 在真实的开发中,我们通常是使用SpringBoot的,目前SpringBoot是v2.4.x的版本(SpringBoot 2.2.2.RELE ...
- 单元测试神器Mockito
Mockit是一种mock工具/框架.mock可以模拟各种各样的对象,从而代替真正的对象做出希望的响应 1.工程中引入Mockito #以gradle的方式为例 testCompile("o ...
- 单元测试系列:Mock工具之Mockito实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...
- 单元测试系列之五:Mock工具之Mockito实战
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...
- Android单元测试
安卓单元测试总结文章,目测主要会cover以下的主题: 什么是单元测试 为什么要做单元测试 JUnit Mockito Robolectric Dagger2 一个具体的app例子实践 神秘的bonu ...
- Android单元测试: 首先,从是什么开始
Android单元测试: 首先,从是什么开始 http://chriszou.com/2016/04/13/android-unit-testing-start-from-what.html 这是一系 ...
- 【项目经验】Mockito教程
一.教程 转载:https://blog.csdn.net/sdyy321/article/details/38757135/ 官网: http://mockito.org API文档:http:// ...
- Java Mocking入门—使用Mockito
Java Mocking入门—使用Mockito 2014/03/10 | 分类: 基础技术 | 0 条评论 | 标签: 单元测试 分享到:8 本文由 ImportNew - liken 翻译自 dz ...
随机推荐
- web全套资料 干货满满 各种文章详解
sql注入l MySqlMySQL False注入及技巧总结MySQL 注入攻击与防御sql注入学习总结SQL注入防御与绕过的几种姿势MySQL偏门技巧mysql注入可报错时爆表名.字段名.库名高级S ...
- 使用abcpdf分页设置的问题
如果需要在分页时不对模块进行截断,请为相应模块添加打印样式“page-break-inside: avoid” 如果需要在指定位置进行强制分页,请添加:“<div style="pag ...
- Flutter
2015年, Google 内部开始测试另一种高性能的编程方式,那就 Google 的 Sky 项目.Sky 项目使用网页开发语言Dart开发原生Android 应用,强调应用的运行速度和与 Web ...
- 通用类 对象和XML互转
public class XMLHealper { /// <summary> /// 将自定义对象序列化为XML字符串 /// </summary> /// <para ...
- Daily Pathtracer!安利下不错的Pathtracer学习资料
0x00 前言 最近看到了我司大网红aras-p(Aras Pranckevičius)的博客开了一个很有趣的新系列<Daily Pathtracer~>,来实现一个简单的ToyPathT ...
- 1.8 Double-Opening and Virtual Machine
Since plug-in will be replaced by RN as following years, what is the future of plug-in? the answer i ...
- 百度地图API 自定义标注图标
通过Icon类可实现自定义标注的图标,下面示例通过参数MarkerOptions的icon属性进行设置, 也可以使用marker.setIcon()方法. <script type=" ...
- Javascript高级编程学习笔记(92)—— Canvas(9) 渐变
渐变 渐变由 canvasGradient 实例表示 要创建一个渐变对象需要调用 createLinearGradient() 方法 该方法接收四个参数: 起点的x坐标 起点的y坐标 终点的x坐标 终 ...
- [Swift]LeetCode14. 最长公共前缀 | Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings. If there is n ...
- [Swift]LeetCode466. 统计重复个数 | Count The Repetitions
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...