【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 @ 2023-05-05 09:29  沙汀鱼  阅读(1893)  评论(0编辑  收藏  举报