【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