当前位置: 首页 > news >正文

单元测试junit5

一、idea 安装自动化生成插件jcode5

安装可能不成功,尝试多次安装;

安装成功后,重启idea,再次确认安装是否成功;

二、在需要生成单元测试代码的模块的pom中引入依赖

        ......
        <parent>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-parent</artifactId>
		    <version>3.3.3</version>
		    <relativePath /> <!-- lookup parent from repository -->
	    </parent>

        ......
        <!-- 单元测试 覆盖率 openclover -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-api</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-params</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-junit-jupiter</artifactId>
			<scope>test</scope>
		</dependency>
        ......

三、初始化单元测试类

大概需要添加单元测试代码的类,鼠标放在类名字出,按alt+insert,选择jcode5;
选择generate test class 初始化单元测试代码;

四、剔除无用import报错行

ctrl+alt+o

五、造数据,完善测试代码,使得覆盖率提升

1.有报错信息优先处理报错信息
2.若使用泛型类需要,处理泛型类TMap<K,V>、 ConsumerRecord<?, ?>、V.class等
3.完善打桩代码when
4.调整数据文件使测试代码可正常执行
5.存在逻辑复杂的测试方法时,且需要模拟多种数据时,可以在复制一个测试方法和测试数据文件
6.完善其他代码
7.执行mvn test 查看测试代码执行结果

六、修改特例

Map<K,V>可修改为

Map<String, Object>

对于模拟不来的,可以直接使用构造javabean的方式

测试目标类中 @Value注释的属性如何初始化

ReflectionTestUtils.setField(XXXService, "env", "prod");

测试目标类中静态类如何初始化

try(MockedStatic<ESUtils> theMock = Mockito.mockStatic(ESUtils.class)) {
    theMock.when(() -> ESUtils.convertToSearchFieldsList(Mockito.any())).thenReturn(combineRule);
}

try(MockedStatic<HttpUtil> theMock = Mockito.mockStatic(HttpUtil.class)) {
	theMock.when(() -> HttpUtil.get(anyString(), anyInt())).thenReturn("");
}

七、执行单元测试查看覆盖率

http://www.dtcms.com/a/24436.html

相关文章:

  • 五十天精通硬件设计第35天-高精密仪器PCB设计Guard Ring设计
  • ”无痕模式“真的无痕?
  • Redis的简单使用
  • mybatis-动态SQL
  • Python 发布 Web 应用的常见方法及详细步骤
  • [题解]2024ICPC上海站-In Search of the Ultimate Artifact
  • K8S之脚本管理(Script Management for k8s)
  • aistdio部署deepseek-r1纯教程
  • 地表放置机场和飞机(十)
  • 基于JavaScript的实时数据监控仪表盘开发实践
  • QT C++ modbus 两个字 合成 32位整数
  • DEX-EE三指灵巧手:扩展AI与机器人研究的边界
  • 力扣-二叉树-98 验证二叉搜索树
  • 七、敏捷开发工具:持续集成与部署工具
  • 竞彩数据怎么接入
  • OAI 平台 4G(LTE)基站 、终端、核心网 端到端部署实践(一)
  • . Spring MVC
  • 青少年编程与数学 02-009 Django 5 Web 编程 22课题、性能优化
  • WPF快速创建DeepSeek本地自己的客户端-基础思路版本
  • 用Prim算法求解最小生成树:代码实现与分析
  • AIGC(生成式AI)试用 21 -- Python调用deepseek API
  • 多线程之两阶段终止模式
  • 【DeepSeek】本地部署,保姆级教程
  • scala中为什么能用常量的地方就不用变量
  • Miniconda + VSCode 的Python环境搭建
  • 解锁观察者模式:Java编程中的高效事件管理之道
  • 【Windows软件 - HeidiSQL】导出数据库
  • golang常用库之-swaggo/swag根据注释生成接口文档
  • halcon 条形码、二维码识别、opencv识别
  • Java零基础入门笔记:(4)方法