如何在Java Maven项目中使用JUnit 5进行测试

如何在Java Maven项目中使用JUnit 5进行测试

1. 简介

JUnit 5概述

JUnit是Java编程语言中最流行的测试框架之一。JUnit 5是JUnit的最新版本,它引入了许多新特性和改进,使得编写和运行测试更加灵活和强大。

为什么选择JUnit 5

JUnit 5不仅提供了更强大的功能,还与现代开发工具和环境更好地集成。它支持Java 8及以上版本,并且可以与流行的构建工具(如Maven和Gradle)无缝集成。

JUnit 5与JUnit 4的区别

JUnit 5与JUnit 4的主要区别在于其模块化设计。JUnit 5由三个子项目组成:JUnit Platform、JUnit Jupiter和JUnit Vintage。JUnit Platform提供了在JVM上启动测试框架的基础设施,JUnit Jupiter是新的编程和扩展模型,而JUnit Vintage则允许运行基于JUnit 3和JUnit 4的测试¹²。

2. 环境配置

安装Maven

首先,你需要在系统上安装Maven。你可以从Maven官方网站下载并安装最新版本的Maven。安装完成后,可以通过运行以下命令来验证安装是否成功:

mvn -v
配置Maven项目

接下来,我们需要创建一个新的Maven项目。你可以使用以下命令来创建一个新的Maven项目:

mvn archetype:generate -DgroupId=org.lee.example -DartifactId=junit5-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
引入JUnit 5依赖

在创建好的Maven项目中,我们需要在pom.xml文件中引入JUnit 5的依赖。以下是一个示例配置:

<dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8.1</version><scope>test</scope></dependency>
</dependencies>

3. 编写测试用例

创建简单的Java类

首先,我们创建一个简单的Java类来进行测试。以下是一个示例类:

package com.lee.example;public class Calculator {public int add(int a, int b) {return a + b;}
}
编写JUnit 5测试用例

接下来,我们为上述类编写一个JUnit 5测试用例。以下是一个示例测试类:

package com.lee.example;import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;class CalculatorTest {@Testvoid testAdd() {Calculator calculator = new Calculator();assertEquals(5, calculator.add(2, 3));}
}

在这里插入图片描述

使用JUnit 5的注解

JUnit 5引入了许多新的注解,如@Test@BeforeEach@AfterEach等。以下是一个使用这些注解的示例:

package com.lee.example;import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;class CalculatorTest {private Calculator calculator;@BeforeEachvoid setUp() {calculator = new Calculator();}@AfterEachvoid tearDown() {calculator = null;}@Testvoid testAdd() {assertEquals(5, calculator.add(2, 3));}
}

4. 运行测试

在IDE中运行测试

大多数现代IDE(如IntelliJ IDEA、Eclipse等)都支持直接运行JUnit 5测试。你可以右键点击测试类或方法,然后选择“Run As -> JUnit Test”来运行测试。

使用Maven命令运行测试

你也可以使用Maven命令来运行测试。在项目根目录下运行以下命令:

mvn test

在这里插入图片描述

生成测试报告

Maven Surefire插件可以生成详细的测试报告。你可以在target/surefire-reports目录下找到生成的测试报告。

5. 高级特性

参数化测试

JUnit 5支持参数化测试,这使得你可以使用不同的参数多次运行同一个测试方法。以下是一个示例:

package com.lee.example;import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;class ParameterizedTestExample {@ParameterizedTest@ValueSource(strings = {"racecar", "radar", "level"})void testPalindrome(String candidate) {assertTrue(isPalindrome(candidate));}boolean isPalindrome(String str) {return str.equals(new StringBuilder(str).reverse().toString());}
}

在这里插入图片描述

嵌套测试

JUnit 5支持嵌套测试,这使得你可以在一个测试类中组织多个相关的测试。以下是一个示例:

package com.lee.example;import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;class NestedTestExample {@Nestedclass AddTests {@Testvoid testAddPositiveNumbers() {Calculator calculator = new Calculator();assertEquals(5, calculator.add(2, 3));}@Testvoid testAddNegativeNumbers() {Calculator calculator = new Calculator();assertEquals(-5, calculator.add(-2, -3));}}
}

在这里插入图片描述

动态测试

JUnit 5还支持动态测试,这使得你可以在运行时生成测试用例。以下是一个示例:

package com.lee.example;import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;class DynamicTestExample {@TestFactoryStream<DynamicTest> dynamicTests() {return Stream.of("racecar", "radar", "level").map(text -> dynamicTest("Test if " + text + " is a palindrome", () -> {assertTrue(isPalindrome(text));}));}boolean isPalindrome(String str) {return str.equals(new StringBuilder(str).reverse().toString());}
}

在这里插入图片描述

6. 最佳实践

编写高效的测试用例

编写高效的测试用例是确保代码质量的重要步骤。以下是一些最佳实践:

  • 保持测试用例简洁明了
  • 使用有意义的测试数据
  • 避免测试用例之间的依赖
使用断言

断言是验证测试结果的关键。JUnit 5提供了丰富的断言方法,如assertEqualsassertTrueassertThrows等。以下是一些示例:

package com.lee.example;import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;class AssertionExample {@Testvoid testAssertions() {assertEquals(5, 2 + 3);assertTrue(3 > 2);assertThrows(ArithmeticException.class, () -> {int result = 1 / 0;});}
}

在这里插入图片描述

测试覆盖率

测试覆盖率是衡量测试质量的重要指标。你可以使用工具(如JaCoCo)来生成测试覆盖率报告。以下是一个示例配置:

<build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><execution><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><phase>prepare-package</phase><goals><goal>report</goal></goals></execution></executions></plugin></plugins>
</build>

在运行mvn clean install命令后,你可以在target/site/jacoco目录下找到生成的测试覆盖率报告。
在这里插入图片描述
在这里插入图片描述

7. 总结

文章从环境配置开始,逐步讲解了如何编写测试用例、运行测试以及使用JUnit 5的高级特性。JUnit 5为Java开发者提供了强大的测试工具,使得编写和运行测试变得更加灵活和高效。

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

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

相关文章

设计模式反模式:UML图示常见误用案例分析

第一章 引言 1.1 设计模式与反模式概述 在软件开发领域&#xff0c;设计模式与反模式是两种截然不同的概念&#xff0c;它们在软件设计过程中起着至关重要的作用。设计模式是经过验证的最佳实践&#xff0c;用于解决在特定上下文中经常出现的问题&#xff0c;从而提高软件的可…

《黑神话·悟空》是用什么编程语言开发的?

最近火爆全球的国产 3A 大作《黑神话悟空》&#xff0c;你玩了吗&#xff1f;没玩没关系&#xff0c;有人就是对游戏不感冒&#xff0c;我找了个宣发片&#xff0c;一起感受下3A大作的视觉冲击&#xff0c;而且还是我们从小听到大&#xff0c;那猴子&#x1f412;的故事。 ‌‌…

【Linux】自动化构建工具makefile

目录 背景 makefile简单编写 .PHONY makefile中常用选项 makefile的自动推导 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 ​ ◉ 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…

Scrapy 项目部署Scrapyd

什么是Scrapyd Scrapyd 是一个用来管理和运行 Scrapy 爬虫的服务。它允许用户将 Scrapy 项目部署到服务器上&#xff0c;然后通过一个简单的 API 来启动、停止和监控爬虫的运行。Scrapyd 可以帮助简化爬虫的部署过程&#xff0c;使得用户不必手动在服务器上运行爬虫&#xff0c…

【测试】JMeter从入门到进阶

本文参考 Jmeter自动化测试工具从入门到进阶6小时搞定&#xff0c;适合手工测试同学学习_哔哩哔哩_bilibili JMeter介绍 JMeter 是 Apache 组织使用 Java 开发的一款测试工具&#xff1a; 1、可以用于对服务器、网络或对象模拟巨大的负载 2、通过创建带有断言的脚本来验证程序…

9个最流行的文本转语音引擎【TTS 2024】

在快速发展的技术世界中&#xff0c;文本转语音 (TTS) 引擎正在取得显著进步。从增强各种应用程序中的用户体验到创建逼真且引起情感共鸣的语音输出&#xff0c;TTS 引擎正变得不可或缺。在这里&#xff0c;我们介绍了 2024 年为行业树立新标准的九款最佳 TTS 引擎。 NSDT工具推…

应用层协议(上)Http(URL、Cookie、Session)内含逻辑图解通俗易懂!

绪论​ “少年没有乌托邦 心向远方自明朗”&#xff0c;本章是应用层常用且重要的协议htttp&#xff0c;没看过应用层建议一定先看那一篇后再看本章才能更好的去从上到下的理解应用层。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 1.Http协…

Mac移动硬盘选什么格式最好 Mac怎么用ntfs移动硬盘

在使用Mac电脑的过程中&#xff0c;很多用户可能有需要扩展存储空间的需求。选择合适的移动硬盘格式对于数据传输的效率和兼容性至关重要。本文将详细介绍Mac移动硬盘选什么格式好&#xff0c;以及Mac怎么用ntfs移动硬盘&#xff0c;帮助用户优化Mac的使用体验。 一、Mac移动硬…

悬浮翻译工具有哪些?工作学习必备的5款悬浮翻译工具

当我们身处异国他乡&#xff0c;或是工作中遇到多语种交流的需求时&#xff0c;语言障碍往往会成为一道难以逾越的高墙。 不过&#xff0c;在这个充满创新的时代里&#xff0c;技术已经为我们准备好了答案——屏幕翻译器app。它们不仅能够即时翻译屏幕上的文字&#xff0c;还能…

电脑回收站清空了怎么恢复?

在日常使用电脑的过程中&#xff0c;不小心清空回收站导致重要文件丢失的情况时有发生。面对这种情况&#xff0c;我们不必过于慌张&#xff0c;因为有多种方法可以尝试恢复被清空的文件。本文将为您详细介绍几种有效的恢复方法&#xff0c;帮助您找回宝贵的文件。 方法一&…

芯片后端之 PT 使用 report_timing 产生报告 之 -nets 选项

今天,我们再学习一点点 后仿真相关技能。 那就是,了解 report_timing 中的 -nets 选项 。 如果我们仅仅使用如下命令,执行后会发现: pt_shell> report_timing -from FF1/CK -to FF2/d -delay_type max 我们使用命令 report_timing 报出的如上路径延时信息,仅仅显示…

Maven的一些相关知识【重修】《包括私服搭建!》

mvnrepository.com Maven 下载jar包的位置&#xff01; 【该部分有教程】 这是什么nb代码投稿视频-这是什么nb代码视频分享-哔哩哔哩视频 MAVEN 的私服搭建&#xff1a; https://zhuanlan.zhihu.com/p/520107316 2、maven私服搭建及应用&#xff08;下&#xff09;_哔哩…

R7RS标准之重要特性及用法实例(三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

frameworks 之InputReader

frameworks 之InputReader InputManagerService 初始化InputManagerService 启动InputReader 事件的读取设备节点注册和监听设备输入事件的读取 InputReader 事件的处理设备的添加和删除处理触摸事件的处理数据的加工和分发 android 输入事件 主要分 2个流程 事件读取 和 事件…

python的jieba库中文分词词频统计和合并

可能在设置问题模板的时候需要分析已有问句&#xff0c;然后统计词频&#xff0c;根据词频设计问题模板

31套科技风PPT免费分享

目录 部分展示 部分展示 #PPT下载 「科技风模板」链接&#xff1a;https://pan.quark.cn/s/fb2f39a1d343 链接永久有效&#xff0c;点击这里下载&#xff0c;记得给个赞哦

Java生成一个5位的随机验证码(大小写字母和数字)

生成验证码 内容&#xff1a;可以是小写字母&#xff0c;也可以是大写字母&#xff0c;还可以是数字 规则&#xff1a;长度为5 内容中四位字母&#xff0c;一位数字 其中数字只有一位&#xff0c;但是可以出现在任意位置。 package test;impo…

QT error: expected ‘:‘ before ‘slots‘ public slots:

C:\Users\Administrator\Desktop\VideoHill\GikISearch\net.h:10: error: expected : before slots public slots: 先看看头文件里有没有加上引用包含#include <xxxx> 也就是一个引用包含都没有 没有就会报这个。至少一个。 加上后

【架构-24】XML和JSON

XML&#xff08;可扩展标记语言&#xff09;和JSON&#xff08;JavaScript对象表示法&#xff09;是两种常用的数据格式&#xff0c;用于在不同系统之间传输和交换数据。它们各有优点和缺点&#xff0c;适用于不同的场景。下面是对XML和JSON的简要介绍以及它们之间的对比。 XM…

Chapter 01 Vue入门

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、Vue简介二、el:挂载点三、data&#xff1a;数据对象四、第一个Vue程序五、安装 Vue 开发者工具 前言 Vue 是一个框架&#xff0c;也是一个生态&#xff0c;其功能覆盖…