【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标签中配置本地仓库位置
image
image

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>

image

5. IDEA创建Maven项目

创建一个空项目

image

修改SDK

image
image

Settings中查找maven,配置maven版本号以及配置文件位置

image

创建maven模块

image

创建好之后就是标准的maven项目开发结构目录

不同的文件夹有不同的类型(如果有没有自动创建的文件夹可视情况自行添加)
各目录存放资源类型说明:

  • src/main/java:项目java源码
  • src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
  • src/test/java:测试代码
  • src/test/resources:测试相关配置文件
  • src/pom.xml:项目pom文件

image
image

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>

image

添加依赖后,右键pom.xml->Maven->Reload project更新External Libraries中的jar包
image
image

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

image

在测试用例test1上加入注解@Disabled,使test1失效

image

测试结果2

image

分别将test1和test2用@DisplayName加上用例展示名称

image

测试结果3

image

对测试用例2加上注解@RepeatedTest,使其额外重复执行3次

image

测试结果4

image

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输出");
}
}
}
测试结果

image
由测试结果可以看出,@Nested的执行顺序为先执行@Nested嵌套外层的用例,再以倒叙形式执行@Nested用例,然后再执行第二层嵌套的用例:
外层->倒叙嵌套->第二层嵌套

6.4 src/test/java下创建测试类NestedDemoTest(Junit5套件执行)

(1)添加依赖
image

(2)有两个包Junit5Demo, NestedDemo,利用@RunWith+@SelectPackages将包中测试类依次运行
image

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 {
}
测试结果

image

(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 {
}
测试结果

image

(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 {
}
测试结果

image

参考资源:
用IDEA创建Maven项目+junit进行测试
如何利用xUnit框架对测试用例进行维护-xUnit简介及基本使用方法(基于Junit4)
Junit5简介、构成、新特性及基本使用-常用注解、套件执行
Junit5

posted @   沙汀鱼  阅读(1988)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示