【Java学习笔记】Maven项目+Junit5单元测试
1. Maven简介;Maven概念:仓库、坐标
Maven坐标:描述仓库中资源的位置
Maven坐标查找:https://mvnrepository.com/
Maven坐标组成:
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.Google)
- artifactId:定义当前Maven项目名称(通常是模块名称)
- version:定义当前Maven项目版本号
2. Maven在windows下的安装与配置
3. 本地仓库配置
在settings.xml文件中的<settings
标签中配置本地仓库位置
4. 镜像仓库配置(中央仓库的镜像)
在settings.xml文件中的<mirrors></mirrors>
标签中配置镜像仓库,这里配置阿里云镜像仓库
镜像仓库配置代码
<mirror> <!-- 此镜像唯一的标识符,用来区分不同的mirror元素 --> <id>aliyunmaven</id> <!-- 对哪种仓库进行镜像,简单来说就是替代哪个仓库,这里替代中央仓库 --> <mirrorOf>central</mirrorOf> <!-- 镜像名称 --> <name>aliyun maven</name> <!-- 镜像URL --> <url>https://maven.aliyun.com/repository/public</url> </mirror>
5. IDEA创建Maven项目
创建一个空项目
修改SDK
Settings中查找maven,配置maven版本号以及配置文件位置
创建maven模块
创建好之后就是标准的maven项目开发结构目录
不同的文件夹有不同的类型(如果有没有自动创建的文件夹可视情况自行添加)
各目录存放资源类型说明:
- src/main/java:项目java源码
- src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
- src/test/java:测试代码
- src/test/resources:测试相关配置文件
- src/pom.xml:项目pom文件
6. Junit5实操
6.1 创建好的Maven工程JunitDemo
中之后,在pom.xml
中添加Junit5
的依赖,可以在https://mvnrepository.com/ 查找相应版本依赖代码
Junit5的依赖
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.9.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.9.2</version> <scope>test</scope> </dependency>
添加依赖后,右键pom.xml->Maven->Reload project更新External Libraries中的jar包
6.2 src/test/java下创建测试类Junit5DemoTest
添加用例@Test
在用例执行前后添加@BeforeEach和@AfterEach
在测试类执行前后添加@BeforeAll和@AfterAll
代码
import org.junit.jupiter.api.*; public class Junit5DemoTest { @BeforeAll public static void beforeAllTest() { System.out.println("我是@BeforeAll,测试类执行前要先执行我\n"); } @BeforeEach public void beforeEachTest() { System.out.println("我是@BeforeEach,执行用例前先执行我"); } @Test void test1() { System.out.println("junit5 test1"); } @Test void test2() { System.out.println("junit5 test2"); } @AfterEach public void afterEachTest() { System.out.println("我是@AfterEach,执行用例后要执行我\n"); } @AfterAll public static void afterAllTest() { System.out.println("我是@AfterAll,测试类执行完了要执行我"); } }
测试结果1
在测试用例test1上加入注解@Disabled,使test1失效
测试结果2
分别将test1和test2用@DisplayName加上用例展示名称
测试结果3
对测试用例2加上注解@RepeatedTest,使其额外重复执行3次
测试结果4
6.3 src/test/java下创建测试类NestedDemoTest(嵌套执行)
代码
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; public class NestedDemoTest { @Test @DisplayName("外层测试") void outerTest() { System.out.println("最外层测试输出"); } @Nested @DisplayName("内层测试1") class Inner { @Test void innerTest() { System.out.println("内层测试1输出"); } @Nested @DisplayName("内层测试1嵌套") class InInner { @Test void InInnerTest() { System.out.println("内层测试1嵌套内层输出"); } } } @Nested @DisplayName("内层测试2") class Inner2 { @Test void innerTest2() { System.out.println("内层测试2输出"); } } }
测试结果
由测试结果可以看出,@Nested的执行顺序为先执行@Nested嵌套外层的用例,再以倒叙形式执行@Nested用例,然后再执行第二层嵌套的用例:
外层->倒叙嵌套->第二层嵌套
6.4 src/test/java下创建测试类NestedDemoTest(Junit5套件执行)
(1)添加依赖
(2)有两个包Junit5Demo, NestedDemo,利用@RunWith+@SelectPackages将包中测试类依次运行
RunWithDemoTest.java
package suit; import org.junit.platform.runner.JUnitPlatform; import org.junit.platform.suite.api.SelectPackages; import org.junit.runner.RunWith; @RunWith(JUnitPlatform.class) @SelectPackages(value = {"Junit5Demo", "NestedDemo"}) public class RunWithDemoTest { }
测试结果
(3)@RunWith+@SelectPackages+@IncludePackages配合使用过滤出需要执行的测试包
RunWithDemoTest.java
package suit; import org.junit.platform.runner.JUnitPlatform; import org.junit.platform.suite.api.IncludePackages; import org.junit.platform.suite.api.SelectPackages; import org.junit.runner.RunWith; @RunWith(JUnitPlatform.class) @SelectPackages(value = {"Junit5Demo", "NestedDemo"}) @IncludePackages("Junit5Demo.demo") public class RunWithDemoTest { }
测试结果
(4)@RunWith+@SelectPackages+@ExcludePackages配合使用过滤出不需要执行的测试包
RunWithDemoTest.java
package suit; import org.junit.platform.runner.JUnitPlatform; import org.junit.platform.suite.api.ExcludePackages; import org.junit.platform.suite.api.IncludePackages; import org.junit.platform.suite.api.SelectPackages; import org.junit.runner.RunWith; @RunWith(JUnitPlatform.class) @SelectPackages(value = {"Junit5Demo", "NestedDemo"}) //@IncludePackages("Junit5Demo.demo") @ExcludePackages("Junit5Demo.demo") public class RunWithDemoTest { }
测试结果
参考资源:
用IDEA创建Maven项目+junit进行测试
如何利用xUnit框架对测试用例进行维护-xUnit简介及基本使用方法(基于Junit4)
Junit5简介、构成、新特性及基本使用-常用注解、套件执行
Junit5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具