0


单元测试 0%-40%+经验

对于一个单元测试基本为零的老项目,从零开始编写单元测试需要耗费大量的人力,且所做的工作重复且无意义。故在此介绍一种快速生成单元测试模板的方法,将重复工作交给工具,把人力用在更需要的地方。

由于上下游服务提供方皆未搭建测试环境,涉及杰夫接口的单元测试无法运行,故本篇文章主要介绍基于此环境下的接口mock测试。

1.工具准备

idea中搜索插件Squaretest(矩阵测试工具),此工具能一键自动生成单元测试模板。工具默认30天试用,对于一般单元测试时间足够。到期后可以购买license
idea中搜索插件GenerateAllSetter(一键调用一个对象的所有的set方法),此工具能一键生成一个对象的所有setter方法。
这两个工具安装完成后需要重启idea来启用插件。
项目pom中引入mockito-core包,此包用于mock的支持

org.mockito
mockito-core
2.20.0
test

2.检查项目单元测试覆盖率

2.1在自己的测试包下的java包单击鼠标右键

在这里插入图片描述

2.2在弹出的菜单中选择运行覆盖测试

在这里插入图片描述

2.3运行结束后展开项目中的包结构,包后会显示单元测试的类覆盖率和代码行覆盖率。图中82% classes, 64% lines covered表示覆盖了82% 的类和64%的代码行

在这里插入图片描述

2.4向下展开包结构,查看每个类的单元测试覆盖率,我这里展开后发现这几个类的覆盖率是0%,说明没有对应的单元测试类。

在这里插入图片描述

3.为实体类生成单元测试

3.1我们进入一个类中,进行Squaretest快捷键的配置

Squaretest在mac上默认快捷键为 command + shift + L, 在windows上默认快捷键是ctrl + alt + k。

具体快捷键可在idea设置中查看,设置修改位置如图,Keymap中搜索squ,然后修改图中箭头所指位置的快捷键,我这里为了使用方便将其设置为键盘上esc键下边的 · 符号,方便一键生成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2模板配置

配置好快捷键后再次进入刚才的类中,光标要留在当前类中,然后按下刚才设置的快捷键。会弹出一个配置窗口,这里的Test Language必须选择java,Template选择JUnit4MockitoSpring.java.ft,Test Sources Root选择测试类存放的位置(也就是当前项目的测试包目录,目录设置到测试包下的java包即可 例如 jd-superstore-service/src/test/java)
在这里插入图片描述
在这里插入图片描述

3.3生成你的第一个测试类

点击ok后就会生成你的第一个测试类,如图所示。我们发现由于这个类是一个实体类,本身只有构造方法和继承于父类的一些属性。所以单元测试工具只生成了一个框架。并没有生成测试方法。那么如何生成实体类的单元测试从而覆盖其getter setter方法呢,我们接着往下看
在这里插入图片描述

3.4这是一个包含属性的实体类,那么它的getter setter方法怎么覆盖呢?

我们在第六步中选择的JUnit4MockitoSpring.java.ft模板并不适合用在实体类中,实体类的模板需要我们自己定义,这真是一个坏消息,不过有一个好消息是模板我这里有,在生成实体类的单元测试时要将模板修改为如下模板,并在项目中添加如下工具类。工具类是通过反射获取实体类所有的get set方法并调用,从而覆盖实体类的所有getter setter方法。

实体类测试模板链接:SquareTest实体类模板

实体类所需的额外工具类:SquareTest工具类

3.5再次生成

我们配置好模板,然后删除刚刚生产的“空”测试类,再次打开要生成测试类的实体类,使用快捷键生成测试类,可以看到当前类会继承我们刚刚导入的工具类,并且类中会多生成一个重写方法。
在这里插入图片描述

3.6检查当前测试类代码行覆盖

我们在这个类中运行一下覆盖测试,然后查看包结构中的覆盖率变化,发现代码行覆盖率已经达到了44%(注意这是实体类的生成方式),实体类的单元测试都可以这么生成。

4.为业务类生成单元测试

4.1回到项目中,找一个写有逻辑的服务类,如图。

在这里插入图片描述

4.2然后我们打开idea的设置

将项目当前模块的模板修改为 JUnit4MockitoSpring.java.ft,点击确定
在这里插入图片描述

4.3按下快捷键,生成测试类

4.4图中红框内就是生成的默认入参和mock

Squaretest生成的实体类的setter方法有数量限制,其余的方法使用我们准备好的另一个工具GenerateAllSetter生成,在一个完整的实例化对象语句上(ShopSkuOfflineQuery shopSkuOfflineQuery = new ShopSkuOfflineQuery();)按下idea的快速补全代码快捷键(mac是option + enter; windows是 alt+enter ),在弹出的下拉框中选择Generate all setter with default value,插件就会自动生成setter方法。
在这里插入图片描述

4.5之后就是调整参数去测试自己的方法,使得测试类能尽可能的覆盖到所有的代码逻辑。

标签: java mysql junit

本文转载自: https://blog.csdn.net/w4187402/article/details/125856012
版权归原作者 王者丶丿风范 所有, 如有侵权,请联系我们删除。

“单元测试 0%-40%+经验”的评论:

还没有评论