单元测试ppt
单元测试ppt思路详解
目前的状况:
1,现在很多单元测试只是利用@Test注解把代码或者整个请求接口内的business做测试
2,单测的过程就很多查数据库的方法,但是没必要每次都测sql,因为sql测一遍都应该是正确的。
3,单测代码启动速度、效率太低
4,没有在各个环境整个工程单元测试通过
5,未采用assert机制,采用system.out.println进行人工核查输出情况
6,关闭了jenkins上单元测试流程
7,时间紧,开发通过swagger页面和端点调试进行代码功能的验证工作
目标改进:
1,单元测试启动效率提升
2,脱离环境,在每个环境都放心执行
3,提供代码覆盖率
4,用于改善和提高开发效率、编码质量、编码可读性、减少冗长的代码行
测试金字塔:
AIR 原则:
Automatic(自动化):单元测试应该是全自动执行的,并且非交互式的。
Independent(独立性):保持单元测试的独立性。为了保证单元测试稳定可靠且便于维护
Repeatable(可重复):单元测试是可以重复执行的,不能受到外界环境的影响。
老板为我有效的代码支付薪酬,而不是测试,所以我的理念是在能达到的自信水平上做越少的测试越好(我觉得这种自信水平应该要高于行业内的标准,当然这也可能只是我的自大)。我对编码过程中通常都不会犯的一类错误(比如在构造方法中错误地赋值)不会进行测试,而更倾向于对那些有意义的错误进行测试,所以对于一些具有业务逻辑的复杂条件我会特别小心。当在一个团队中合作时,我会非常小心地修改我的策略,以便测试那些容易让团队出现错误的地方。
如何做:
1,必须基于团队正式的代码工程,而不是随便找一个示例代码工程来讲解——这样的书和文章已经太多了,我不会比他们做的更好;
2,必须识别并提取出小的可测试单元,但不要让团队成员学习更多的高深的知识,比如设计模式、Mock&Stub等;
3,最好能够度量,比如能提高10% - 20% 的测试覆盖率。
单元测试的编写,主要包含以下几个阶段:
数据准备:在编写测试用例前,需要依赖到一些数据,数据来源一般是数据库。
构造参数及打桩(stub):调用方法需要传递入参,依赖的类需要做mock和stub
执行测试:这一步比较简单,直接调用被测方法即可。
结果验证:这里除了验证被测方法的返回值外,还需要验证插入到数据库中的数据是否正确,某外部方法被调用过n次或未调用过。
必要的清理:对打桩进行清理,对数据库脏数据进行清理。
mockio使用基础,主要是两个注解的认识,然后其它语法请自己参照
@mock Mock声明的对象,对函数的调用均执行mock(即虚假函数),不执行真正部分。
@spy Spy声明的对象,对函数的调用均执行真正部分。
@InjectMocks 一般来修饰你需要测试的顶层类。使用这个注解可以创建一个实例,并且将你用@Mock注解的对象注入到这个实例中。
@spy +@Autowired 这个对象的依赖的类也是会自动autowired,如果我的依赖的对象还有依赖(这在大多数的项目中是非常常见的),根据上面的说法用@Spy的对象是不会自动注入依赖的
@InjectMocks+@Autowired 两个注解叠加使用,让@Autowired注解为对象注入真依赖。
when和doReturn
when(dao.getOrder()).thenReturn("returened by mock ");
doReturn(expected).when(underTest).methodToTest();
使用when去设置模拟返回值时,它里面的方法(dao.getOrder())会先执行一次。
使用doReturn去设置的话,就不会产生上面的问题,因为有when来进行控制要模拟的方法,所以不会执行原来的方法。
分层的测试:
给一个目前的图例:controller-》service-》dao层的测试
提供mybatis层,service层,controller的测试
数据库有dbunit,spring 的@sql注解来实现数据载入
service层的测试:
controller层的测试如何测。
@RunWith(SpringRunner.class) : SpringRunner是SpringJUnit4ClassRunner的简写,它扩展了BlockJUnit4ClassRunner类,用于提供测试时的Spring应用上下文信息。
@WebMvcTest(value=UserController.class,secure = false) : 该注解用于测试Spring MVC应用程序,使用此注解的好处是我们只需要加载UserController类并对其中的方法进行单元测试,而不需要加载其他的控制器。
@MockBean : MockBean主要是模拟向Spring应用上下文注入一个Bean对象,并使该Bean对象可以在控制器中被访问到。
MockMvc : MockMvc是测试Spring MVC应用程序的主要入口,它将为我们的测试提供一个模拟的应用上下文环境。
普通的按照service的测试模式可以吗?丢失了什么东西:
需要springmockmvc来测试:
mockcontroller层依赖的service和utils类的方法
如何measuser测试覆盖率:
IDEA如何测试代码的覆盖率统计
一些tips:
1,如果写了一些实际调用其它系统的单元测试,但是在跑jenkins单元测试依赖环境不能部署怎么办。添加igonore注解
2,@PrepareForTest(HelloUtil.class)
一些问题:
1,在开启单元测试后,每次部署慢的情况如何解决(目前只包含打包,上传和部署都有7分钟的gap时间了,如何改进)
2,要做好单元测试,首要条件是要有单元。如果组件内的代码没有分成清晰独立的小单元,那单元测试就无从谈起。所以,三分测试,七分设计。
如果能将代码合理地拆分成不同的单元,你就会发现,大部分单元,如图中绿色部分所示,都是非常独立的,它们不依赖数据库等外部资源,只是一个内存的计算,所以这部分是非常容易做自动化单元测试的。
所以,当你的应用的自动化单测覆盖率只是个位数的话,先不要急着引入MOCK框架这类工具,当务之急是做这种单元化的改造,测试那些投入产出效果明显的部分。以后在用MOCK等方式测试其它的部分。
在介绍这些单元测试的方法后,大家能不能总结一下单元测试应该具体什么特性:
- 有效:只测试 核心的业务逻辑
- 单元:核心的每个小方法的测试
- 覆盖场景:除了测试正常流程,还要测异常流程,
- 可重复执行:不依赖db和redis的外部依赖,采用h2数据库
- 断言:
时间比较紧,是否可以采用代码生成的方式来生成测试代码
单元测试ppt的更多相关文章
- C#单元测试分享ppt
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类, ...
- Intellij idea添加单元测试工具
1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...
- Python的单元测试(二)
title: Python的单元测试(二) date: 2015-03-04 19:08:20 categories: Python tags: [Python,单元测试] --- 在Python的单 ...
- Python的单元测试(一)
title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...
- 46张PPT讲述JVM体系结构、GC算法和调优
本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...
- javascript单元测试框架mochajs详解
关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...
- C#向PPT文档插入图片以及导出图片
PowerPoint演示文稿是我们日常工作中常用的办公软件之一,而图片则是PowerPoint文档的重要组成部分,那么如何向幻灯片插入图片以及导出图片呢?本文我将给大家分享如何使用一个免费版Power ...
- 使用NUnit为游戏项目编写高质量单元测试的思考
0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试 一.模型状态 - ModelState 我理解 ...
随机推荐
- GDI+图像编程
一.Graphics GDI+是GDI(Windows Graphics Device Interface)的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘 ...
- unittest简单使用的介绍
无论是paython+request接口测试.ui自动化测试等,都常会用到unittest的框架,简单的介绍如下:
- [2019HDU多校第二场][HDU 6591][A. Another Chess Problem]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6591 题目大意:二维坐标系上,所有满足\(5|2x+y\)的点都被设为障碍物,无法通过.现给出一对点, ...
- Tpcc-mysql 结果解读
原文:https://blog.csdn.net/frockee/article/details/87812329 1. 填坑经验 不要使用tidb的tpcc测试程序(非标准,tidb修改过),使 ...
- SessionState,默認mode應該是"InProc"
在ASP.NET的sessionState的三種屬性 http://www.dotblogs.com.tw/boei/archive/2010/07/06/16414.aspx需要在另外的config ...
- [BJWC2008]王之财宝
嘟嘟嘟 如果没有限制,而且必须选\(m\)件的话,就是隔板法\(C_{n + m - 1} ^ {m - 1}\)了.现在要选至多\(m\)件,那么就相当于新增一个板儿,分出的新的盒子表示" ...
- Hihocoder #1333 : 平衡树·Splay2
1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊!前几天老师让我帮忙 ...
- 【线性代数】7-1:线性变换思想(The Idea of a Linear Transformation)
title: [线性代数]7-1:线性变换思想(The Idea of a Linear Transformation) categories: Mathematic Linear Algebra k ...
- Driver对 (一对两对的对):specific/mini VS general
老是听说miniport,port,在这里算是搞清楚了.mini就是specific(特殊)的意思.在微软的驱动层次里面,最底层的一般都是比较特殊的,但是为了满足系统的可拓展.可维护.通用等要求,微软 ...
- AcWing:242. 一个简单的整数问题(树状数组)
给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d. 第二类指令形如“Q X”,表示询问数列中第x个数的值. 对于每个询问,输出一个整数表示 ...