SpringBoot整合JUnit5

发布于:2023-07-27 ⋅ 阅读:(96) ⋅ 点赞:(0)

前言

JUnit5是Java的测试框架,可以帮助Java程序员对自己编写的代码进行测试,使用起来比较友好。借用JUnit5官网上一句话来说:The 5th major version of the programmer-friendly testing framework for Java and the JVM
本次就来简单总结下JUnit5的基本用法
链接: 官网地址

引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

常用注解

● @Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
● @RepeatedTest :表示方法可重复执行
● @DisplayName :为测试类或者测试方法设置展示名称
● @BeforeEach :表示在每个单元测试之前执行
● @AfterEach :表示在每个单元测试之后执行
● @BeforeAll :表示在所有单元测试之前执行
● @AfterAll :表示在所有单元测试之后执行
● @Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
● @Timeout :表示测试方法运行如果超过了指定时间将会返回错误
● @ExtendWith :为测试类或测试方法提供扩展类引用

@DisplayName

package com.gavin.boot;

import org.junit.jupiter.api.*;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }
}

运行结果
在这里插入图片描述

@BeforeEach

package com.gavin.boot;

import org.junit.jupiter.api.*;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }
    
    @BeforeEach
    void testBeforeEach() {
        System.out.println("开始测试了。。。");
    }
}

运行结果
在这里插入图片描述

@AfterEach

package com.gavin.boot;

import org.junit.jupiter.api.*;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }

    @BeforeEach
    void testBeforeEach() {
        System.out.println("开始测试了。。。");
    }

    @AfterEach
    void testAfterEach() {
        System.out.println("测试已经结束了。。。");
    }
}

运行结果
在这里插入图片描述

@BeforeAll

package com.gavin.boot;

import org.junit.jupiter.api.*;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }

    @Test
    @DisplayName("第二次测试")
    void secondTest() {
        System.out.println(2);
    }

    @BeforeEach
    void testBeforeEach() {
        System.out.println("开始测试了。。。");
    }

    @AfterEach
    void testAfterEach() {
        System.out.println("测试已经结束了。。。");
    }

    @BeforeAll
    static void testBeforeAll() {
        System.out.println("所有的开始测试了。。。");
    }
}

运行结果
在这里插入图片描述

@AfterAll

package com.gavin.boot;

import org.junit.jupiter.api.*;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }

    @Test
    @DisplayName("第二次测试")
    void secondTest() {
        System.out.println(2);
    }

    @BeforeEach
    void testBeforeEach() {
        System.out.println("开始测试了。。。");
    }

    @AfterEach
    void testAfterEach() {
        System.out.println("测试已经结束了。。。");
    }

    @BeforeAll
    static void testBeforeAll() {
        System.out.println("所有的开始测试了。。。");
    }

    @AfterAll
    static void testAfterAll() {
        System.out.println("所有的测试已经结束了...");
    }
}

运行结果
在这里插入图片描述

@Timeout

package com.gavin.boot;

import org.junit.jupiter.api.*;

import java.util.concurrent.TimeUnit;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }

    @Test
    @DisplayName("第二次测试")
    void secondTest() {
        System.out.println(2);
    }

    @BeforeEach
    void testBeforeEach() {
        System.out.println("开始测试了。。。");
    }

    @AfterEach
    void testAfterEach() {
        System.out.println("测试已经结束了。。。");
    }

    @BeforeAll
    static void testBeforeAll() {
        System.out.println("所有的开始测试了。。。");
    }

    @AfterAll
    static void testAfterAll() {
        System.out.println("所有的测试已经结束了...");
    }

    @Test
    @Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
    void testTimeout() throws InterruptedException {
        Thread.sleep(600);
    }
}

运行结果
在这里插入图片描述
可以看出,如果方法执行的时间超过测试设置的时间就会报错

@Disabled

package com.gavin.boot;

import org.junit.jupiter.api.*;

import java.util.concurrent.TimeUnit;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }

    @Test
    @DisplayName("第二次测试")
    void secondTest() {
        System.out.println(2);
    }

    @BeforeEach
    void testBeforeEach() {
        System.out.println("开始测试了。。。");
    }

    @AfterEach
    void testAfterEach() {
        System.out.println("测试已经结束了。。。");
    }

    @BeforeAll
    static void testBeforeAll() {
        System.out.println("所有的开始测试了。。。");
    }

    @AfterAll
    static void testAfterAll() {
        System.out.println("所有的测试已经结束了...");
    }

    @Test
    @Disabled
    @Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
    void testTimeout() throws InterruptedException {
        Thread.sleep(600);
    }
}

运行结果
在这里插入图片描述
可以看出,testTimeout()方法加上了@Disabled这个注解后,这个方法就没有执行了,就不会有报错了

@ExtendWith

如果我们想使用RedisTemplate,我就在类中注入RedisTemplate

package com.gavin.boot;

import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
        System.out.println(redisTemplate);
    }
}

运行结果
在这里插入图片描述
可以看出,RedisTemplate 并没有被注入到容器中,如果需要主要到spring容器中,就需要添加@SpringBootTest

package com.gavin.boot;

import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
@DisplayName("JUnit5功能测试类")
public class Junit5 {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
        System.out.println(redisTemplate);
    }
}

运行结果
在这里插入图片描述
可以看出,RedisTemplate已经被注入到spring容器中
那为什么加了@SpringBootTest注解RedisTemplate就可以注入到spring容器中呢?我们点进@SpringBootTest注解看一下源码就知道了
在这里插入图片描述
可以看出,源码中也是添加了@ExtendWith注解,才能把@Autowired的类注入到spring容器中,这就是@ExtendWith注解的基本用法了

@RepeatedTest

package com.gavin.boot;

import org.junit.jupiter.api.*;

@DisplayName("JUnit5功能测试类")
public class Junit5 {


    @Test
    @RepeatedTest(value = 5)
    @DisplayName("第一次测试")
    void firstTest() {
        System.out.println(1);
    }
}

运行结果
在这里插入图片描述
可以看出方法运行了5次

总结

以上就是JUnit5中基本注解的用法,其它注解以后有时间再继续更新。

本文含有隐藏内容,请 开通VIP 后查看