单元测试与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 ...
随机推荐
- java学习之路--零碎的知识笔记
java运算符: 自增自减运算符: int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4 前缀自增自减法(++a,--a): 先进行自增或者自减运算,再 ...
- SQL语句题
SQL语句题 Student(Sno,Sname,Sage,Ssex)注释:学生表(学号,姓名,性别年龄,性别) Course(Cno,Cname,Tno) 注释:课程表(课程号,课程名称,教师编号) ...
- 史上最全java面试题
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
- MYSQL数据库数据拆分之分库分表总结
数据存储演进思路一:单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 数据存储演进思路二:单库多表 随着用户数量的 ...
- iOS URL Schemes与漏洞的碰撞组合
iOS URL Schemes与漏洞的碰撞组合 前言 iOS URL Schemes,这个单词对于大多数人来说可能有些陌生,但是类似下面这张图的提示大部分人应该都经常看见: 今天要探究的就是:了解iO ...
- 体验一把做黑客的感觉-IPC$入侵之远程控制
前言 一看你就是看标题进来的,我可不是标题党啊,大家往下看吧,本文章主要介绍了利用IPC共享漏洞上传并执行木马. 基础知识 一.什么是IPC 进程间通信(IPC,Inter-Process Commu ...
- FFmpeg 结构体学习(二): AVStream 分析
在上文FFmpeg 结构体学习(一): AVFormatContext 分析我们学习了AVFormatContext结构体的相关内容.本文,我们将讲述一下AVStream. AVStream是存储每一 ...
- [Swift]LeetCode98. 验证二叉搜索树 | Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- [Swift]LeetCode1000. 合并石头的最低成本 | Minimum Cost to Merge Stones
There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consists ...
- MySQL 规范及优化
一.建库建表优化 1.核心规范(推荐) 表字符集选择UTF8 (“表情”字段单独设置为其他字符集) 存储引擎使用INNODB 不在库中存储图片.文件等 使用可变长字符串(varchar) 每张表数据量 ...