Junit(Java单元测试)

配置文件

要想使用 Junit 进行单元测试需要引入以下第三方库:

引入后可以使用 @Test,@BeforeEach等注解

复制代码
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

引入后可以进行"参数化"

复制代码
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

引入后可管理测试用例,如 @Suite

复制代码
        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

注解

@Test 标注测试方法

java 复制代码
public class JunitTest {
    @Test   //标注下面的方法是测试方法
    public void test01(){
        System.out.println("==========这是第一个测试用例==========");
    }

    @Test
    public void test02(){
        System.out.println("==========这是第二个测试用例==========");
    }
}

@BeforeAll 和 @AfterAll 标注在测试之前和之后执行的方法

java 复制代码
    @BeforeAll
    static void Start(){
        System.out.println("********** 测试开始 **********");
    }

    @AfterAll
    static  void End(){
        System.out.println("********** 测试结束 **********");
    }

@BeforeEach 和 @AfterEach 标注在每条测试之前和之后执行的方法

java 复制代码
    @BeforeEach
    public void startEach(){
        System.out.println("********** 测试开始 **********");
    }

    @AfterEach
    public void endEach(){
        System.out.println("********** 测试结束 **********");
    }

@TestMethodOrder 和 @Order(优先级) 标注测试方法的执行顺序

如下代码设置 test01 的执行优先级为 2 小于 test02 的执行优先级 1,所以 test02 测试方法先执行,其次才是 test01 方法

java 复制代码
// @TestMethodOrder 指定用哪个方法来进行测试方法排序
//MethodOrderer.OrderAnnotation.class 表示用注解排序测试方法
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
    //设置测试方法执行的优先级,2 的优先级小于 1
    @Order(2)
    //标注下面的方法是测试方法
    @Test
    public void test01(){
        System.out.println("==========这是第一个测试用例==========");
    }

    @Order(1)
    @Test
    public void test02(){
        System.out.println("==========这是第二个测试用例==========");
    }
}

@ParameterizedTest 将测试方法参数化

注意:使用 @ParameterizedTest注解就已经代表该方法是一个测试方法,不需要再使用 @Test方法,否则会报错

@ValueSource 单参数

如下代码,会依次将 @ValueSource 注解中定义的整数作为参数依次传入 test03 方法中

java 复制代码
    //将测试方法参数化
    @ParameterizedTest
    //设置参数的数据源,只支持一个参数
    @ValueSource(ints = {1,2,3,4})
    public void test03(int x){
        System.out.println(x);
    }

@CsvSource 多参数

如下代码,会依次将 @CsvSource 注解中定义的多组数据作为参数依次传入 test04 方法中

java 复制代码
    @ParameterizedTest
    //设置参数的数据源,支持多个参数
    @CsvSource({"雨林, 20","小菊,22"})
    void test04(String name,int age){
        System.out.println("name:"+name+" age:"+age);
    }

@CsvFileSource 通过文件传递多参数

test05.txt 文件内容

java 复制代码
张三,28
李四,19
王五,20

如下代码,以 test05.txt 文件中的数据作为参数,传入 test05 测试方法中

java 复制代码
    @ParameterizedTest
    //通过文件传递多参数
    @CsvFileSource(resources = "test05.txt")
    void test05(String name,int age){
        System.out.println("name:"+name+" age:"+age);
    }

注意,如果该测试方法在包中,那么 test05.txt 文件也要放到相同名称的包中

如下图,测试方法在 example 包中

将 test05.txt 文件放到 resources 的 example 包中

@MethodSource 通过方法传递多参数

如下代码,以 Generate 方法中定义的数据作为参数,传入 test06 测试方法中

java 复制代码
    @ParameterizedTest
    //通过方法传递参数
    @MethodSource("Generate")
    void test06(String name,int age){
        System.out.println("name:"+name+" age:"+age);
    }

Generate 方法

java 复制代码
public static Stream<Arguments> Generate() {
        return Stream.of(Arguments.arguments("张三",18),
                Arguments.arguments("李四",20));
    }

@Suite 测试套件(管理测试顺序)

测试套件,用于管理测试顺序(有许多类和包都用于测试,要管理它们的执行顺序)

@SelectClasses 管理测试类的执行顺序

java 复制代码
//测试套件,用于管理测试顺序(有许多类和包都用于测试,要管理它们的执行顺序)
@Suite
//管理测试类的执行顺序
@SelectClasses({JunitTest.class,JunitTest1.class})
public class RunTest {
}

如下图,先执行 JunitTest,再执行 JunitTest1

@SelectPackages 管理包的执行顺序

java 复制代码
//测试套件,用于管理测试顺序(有许多类和包都用于测试,要管理它们的执行顺序)
@Suite
//管理测试包的执行顺序
@SelectPackages(value = {"example"})
public class RunTest {
}

如下图,执行了 example 包下的 JunitTest

相关推荐
nbsaas-boot9 分钟前
如何进行 Vibe Coding:从“灵感驱动”到“可交付工程”的方法论
java·ai编程
Remember_99313 分钟前
Spring 事务深度解析:实现方式、隔离级别与传播机制全攻略
java·开发语言·数据库·后端·spring·leetcode·oracle
roman_日积跬步-终至千里17 分钟前
【Java并发】用 JMM 与 Happens-Before 解决多线程可见性与有序性问题
java·开发语言·spring
空空kkk17 分钟前
SSM项目练习——hami音乐(三)
java·数据库
爬山算法26 分钟前
Hibernate(78)如何在GraphQL服务中使用Hibernate?
java·hibernate·graphql
独断万古他化31 分钟前
【Spring 核心:AOP】基础到深入:思想、实现方式、切点表达式与自定义注解全梳理
java·spring·spring aop·aop·切面编程
编程彩机43 分钟前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
bbq粉刷匠44 分钟前
Java-排序2
java·数据结构·排序算法
编程彩机1 小时前
互联网大厂Java面试:从Spring WebFlux到分布式事务的技术场景解析
java·微服务·面试·分布式事务·spring webflux
Jm_洋洋1 小时前
【C++进阶】虚函数、虚表与虚指针:多态底层机制剖析
java·开发语言·c++