使用testMe自动生成单元测试用例

文章目录

  • 1、testMe简介
  • 2、插件对比
    • 2.1 testMe
    • 2.2 Squaretest
    • 2.3 Diffblue
  • 3、IDEA插件安装
  • 4、单测用例
    • 4.1 maven依赖
    • 4.2 生成用例
  • 5、自定义模板
  • 6、使用自定义模板生成用例
  • 7、调试用例

1、testMe简介

公司对于系统单元测试覆盖率有要求,需要达到50%或80%以上才可以,但是对于之前的老项目或者是前期赶进度未添加单元测试用例的项目来说,手动添加单元测试耗时又费力,这时候我们就需要一款能够提高效率的一款插件来帮助我们提高单元测试覆盖率,经过对比temstMe、Squaretest、Diffblue三个插件,最终选择了一款免费的testMe来作为我们自动化单元测试用例生成插件。

2、插件对比

2.1 testMe

优点:

  1. 开源免费
  2. 使用方便,上手容易
  3. 生成的代码比较简洁

缺点:

  1. 默认方法上都会有throws exception,但是可以通过定制模板去掉
  2. mock方法入参构建不好,经常用null作为入参,需要自己调整入参
  3. 不能增量的生成新方法的单测用例

2.2 Squaretest

优点:

  1. 使用方便,上手容易
  2. 生成的测试方法入参会根据逻辑需要的字段自动填充属性
  3. 可以增量生成指定方法的单元测试用例

缺点:

  1. 收费,但是可以试用30天
  2. 部分生成的方法没有Assert断言判断结果,也需要微调代码
  3. 存在部分重复代码,例如构建的入参实体,如果入参一致的情况下会存在重复代码

2.3 Diffblue

优点:

  1. 功能强大,生成的单元测试用例几乎不用改动就能正常运行
  2. 收费版本会得到其公司支持

缺点:

  1. 功能全的版本需要收费
  2. 免费版本只能用于开源项目,公司项目感觉慎用
  3. 会将代码上传到远端进行生成测试用例

3、IDEA插件安装

File——>Settings——>Plugins——>marketplace,搜索testMe,然后install就好了,插件安装完成后需要重启一下。

在这里插入图片描述

4、单测用例

4.1 maven依赖

<dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>3.5.0</version>
</dependency>
<dependency><groupId>org.mockito</groupId><artifactId>mockito-inline</artifactId><version>4.5.1</version><scope>test</scope>
</dependency>

4.2 生成用例

我们找到需要生成单元测试的类,然后右键点击Generate。

在这里插入图片描述

在弹窗中选择testMe。

在这里插入图片描述

继续选择Junit4 & Mockito来生成单元测试用例。

在这里插入图片描述

我们看下生成的单元测试用例。

在这里插入图片描述

这个单元测试用例有几点柑橘不是很好,第一点是生成的类没有类注释头,第二是Mock 注解 和InjectMocks注解挨在一起,希望能空一行,第三是生成的脚注有点多余,我们不需要。所以这时候我们需要通过自定义模板来修改这些。

5、自定义模板

File——>Settings——>TestMe——>TestMe template 找到testMe的模板。

在这里插入图片描述

我们找到Junit4 & Mockito这个模板,点击上面菜单拷贝一份模板。

在这里插入图片描述

我们在此拷贝的模板基础上进行修改。
首先我们添加一下类注释。

/*** @author author* @date ${DATE} ${TIME}*/

在这里插入图片描述

其次我们在测试类上添加RunWith注解。

import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;

在这里插入图片描述

第三我们添加Mock和InjectMocks添加空行及删除脚注。

在这里插入图片描述

在这里插入图片描述

以下为本人使用的完整模板代码。

#parse("TestMe macros.java")
#set($hasMocks=$MockitoMockBuilder.hasMockable($TESTED_CLASS.fields))
#if($PACKAGE_NAME)
package ${PACKAGE_NAME};
#endimport org.junit.Assert;
import org.junit.Test;
#if($hasMocks)
import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
//import static org.mockito.Mockito.*;
#end/*** @author author* @date ${DATE} ${TIME}*/#parse("File Header.java")
@RunWith(MockitoJUnitRunner.class)
public class ${CLASS_NAME} {
#renderMockedFields($TESTED_CLASS.fields)#renderTestSubjectInit($TESTED_CLASS,$TestSubjectUtils.hasTestableInstanceMethod($TESTED_CLASS.methods),$hasMocks)
#if($hasMocks)@Beforepublic void setUp() {MockitoAnnotations.${MockitoMockBuilder.initMocksMethod}(this);}
#end
#foreach($method in $TESTED_CLASS.methods)
#if($TestSubjectUtils.shouldBeTested($method))@Testpublic void #renderTestMethodName($method.name)() {
#if($MockitoMockBuilder.shouldStub($method,$TESTED_CLASS.fields))
#renderMockStubs($method,$TESTED_CLASS.fields)#end#renderMethodCall($method,$TESTED_CLASS.name)
#if($method.hasReturn())        Assert.#renderJUnitAssert($method)#end}
#end
#end
}

6、使用自定义模板生成用例

我们在使用同样的流程来根据自定义模板生成单元测试用例。

在这里插入图片描述

我们看下生成的新的测试用例格式如下。

在这里插入图片描述

代码格式会比之前好一点,但是生成的单元测试用例还是需要我们微调一下才能跑。

7、调试用例

如果只是注重单元测试覆盖率,那么按照上面的方法生成即可,如果还需要单元测试用例跑通,那么基本上需要我们在微调一下代码。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132552.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

身份证号码,格式校验:@IdCard(自定义注解)

目标 自定义一个用于校验 身份证号码 格式的注解IdCard&#xff0c;能够和现有的 Validation 兼容&#xff0c;使用方式和其他校验注解保持一致&#xff08;使用 Valid 注解接口参数&#xff09;。 校验逻辑 有效格式 符合国家标准。 公民身份号码按照GB11643&#xff0d;…

使用 Eziriz .NET Reactor 对c#程序加密

我目前测试过好几个c#加密软件。效果很多时候是加密后程序执行错误&#xff0c;或者字段找不到的现象 遇到这个加密软件用了一段时间都很正常&#xff0c;分享一下使用流程 破解版本自行百度。有钱的支持正版&#xff0c;我用的是 Eziriz .NET Reactor 6.8.0 第一步 安装 Ezi…

我用了多年的前端框架,强烈推荐!

大家好&#xff0c;我是鱼皮&#xff0c;今天给大家分享一个我自己用了多年、现在团队也在用的前端框架 —— Ant Design Pro。 什么是 Ant Design Pro&#xff1f; Ant Design Pro 是由蚂蚁金服开发的、基于 Ant Design 组件库的开发框架&#xff0c;专门用于构建企业级管理…

《UnityShader入门精要》学习1

读者可以在开源网站github&#xff08;https://github.com/candycat1992/Unity_Shaders_Book&#xff09;上下载本书的源代码。 第二章 渲染流水线 渲染流水线的最终目的在于生成或者说是渲染一张二维纹理&#xff0c;即我们在电脑屏幕上看到的所有效果&#xff0c;它的输入是…

java基础 IO

IO流概述&#xff1a; IO流的分类 字节流写入数据&#xff1a; package wwx;import jdk.swing.interop.SwingInterOpUtils;import java.io.*;public class Test {public static void main(String[] args) throws IOException {//指定写入文件的路径 需要抛出异常FileOutputStr…

【Java 进阶篇】HTML 语义化标签详解

HTML&#xff08;HyperText Markup Language&#xff09;是构建Web页面的标准语言。在HTML中&#xff0c;标签&#xff08;tag&#xff09;是用于定义页面结构和内容的关键元素。在构建网页时&#xff0c;了解如何正确使用HTML标签是非常重要的&#xff0c;因为它们不仅影响页面…

邮政编码,格式校验:@ZipCode(自定义注解)

目标 自定义一个用于校验邮政编码格式的注解ZipCode&#xff0c;能够和现有的 Validation 兼容&#xff0c;使用方式和其他校验注解保持一致&#xff08;使用 Valid 注解接口参数&#xff09;。 校验逻辑 有效格式 不能包含空格&#xff1b;应为6位数字&#xff1b; 不校验…

汽车一键启动点火开关按键一键启动按钮型号规格

汽车点火开关/移动管家一键启动按键/汽车改装引擎启动按钮型号&#xff1a;YD828溥款开关 一键启动按钮&#xff08;适用于配套启动主机使用或原车一键启动开关更换&#xff09; 1.适合配套专用板板安装 2.开孔器开孔安装 3.原车钥匙位安装 外观&#xff1a;黑色 按钮上有3种不…

Tomcat 线程模型性能调优

Linux I/O模型详解 I/O要解决什么问题 I/O&#xff1a;在计算机内存与外部设备之间拷贝数据的过程。 程序通过CPU向外部设备发出读指令&#xff0c;数据从外部设备拷贝至内存需要一段时间&#xff0c;这段时间CPU就没事情做了&#xff0c;程序就会两种选择&#xff1a; 让出…

以数据为中心 的AI v.s. 以模型为中心的AI

原文&#xff1a;Data-Centric AI vs. Model-Centric AI Introduction to Data-Centric AI 当你学习关于机器学习相关的课程时&#xff0c;通常是给你一个清洁好的数据,你的任务是利用这个数据集训练出一个最好的模型。所有在机器学习课程教的技巧都是为了这个目标&#xff1…

需永远在线的游戏公司,如何在线替换开源存储?

小帅是一个酷爱游戏的玩家&#xff0c;他玩一款游戏已经很久了&#xff0c;始终乐在其中。 这款游戏风靡全球&#xff0c;在中国手游出海榜单中&#xff0c;长期位居榜首。 他不知道的是&#xff0c;就在他玩游戏的过程中&#xff0c;这款游戏的出品公司&#xff0c;其实已经…

什么是存储服务器?

随着互联网的发展&#xff0c;越来越多的信息会在网络上暴露&#xff0c;所以企业就会更加重视数据&#xff0c;因此更加安全可靠的数据存储服务器受到了大多数人的信赖&#xff0c;今天就让小编带大家了解一下什么是存储服务器吧&#xff01; 存储服务器的含义。存储服务器是…