欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot 集成JUnit5的詳細(xì)操作過程

 更新時間:2024年10月15日 10:40:28   作者:冬天vs不冷  
JUnit5是最新的Java單元測試框架,提供了靈活的測試支持,它由JUnit Platform、JUnit Jupiter和JUnit Vintage組成,支持不同環(huán)境下的測試運行,SpringBoot從2.2版本開始默認(rèn)支持JUnit5,本文介紹了SpringBoot 集成JUnit5的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧

一、JUnit5介紹

  JUnit5是一個功能強大的單元測試框架,是JUnit系列的最新版本,它引入了多個改進(jìn)和新特性,旨在為Java應(yīng)用程序提供靈活且模塊化的測試支持。

1、JUnit5組成結(jié)構(gòu)

  • JUnit Platform:這個模塊提供了測試的啟動API和運行環(huán)境,是整個JUnit5框架的核心。它支持在不同的環(huán)境中運行測試,如命令行、IDE或構(gòu)建工具(例如Maven、Gradle)
  • JUnit Jupiter:這個模塊包含了JUnit5的新測試編寫和擴展模型,提供了全新的注解、測試方法和擴展機制
  • JUnit Vintage:為了支持舊版本的JUnit測試(JUnit3和JUnit4),JUnit5提供了Vintage模塊。這個模塊允許開發(fā)者繼續(xù)運行以前版本的測試,同時過渡到JUnit5

2、什么是單元測試

  • 單元測試是指對軟件中的最小可測試單元進(jìn)行檢查和驗證的過程叫單元測試
  • SpringBoot中,最小可測試單元就是指方法

二、SpringBoot整合JUnit5

1、快速入門

SpringBoot版本從2.2以后,默認(rèn)支持JUnit5

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

測試類應(yīng)放在src/test/java目錄下

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class MySpringBootApplicationTests {
    @Test
    void contextLoads() {
        // 測試 Spring 應(yīng)用上下文是否成功加載
    }
}

2、測試類和測試方法不需要聲明為public

  • JUnit4中,測試類和測試方法必須是public的,因為JUnit4通過反射機制要求訪問公共方法
  • JUnit5則沒有這種要求,測試類和方法的可見性設(shè)為包級(默認(rèn))足夠 JUnit 5 框架執(zhí)行測試
    • 因為 JUnit 5 本質(zhì)上是在測試框架內(nèi)部執(zhí)行這些測試
    • 包級別的可見性允許同一包內(nèi)的類訪問測試類,而不需要將其暴露為 public

3、@SpringBootTest工作原理

 它會啟動整個Spring容器,加載應(yīng)用程序的所有Bean,并創(chuàng)建一個完整的應(yīng)用上下文。這是集成測試,因為它模擬了應(yīng)用程序的真實運行環(huán)境。

查找主配置類的兩種方式:

  包掃描:默認(rèn)情況下,@SpringBootTest 會從測試類所在的包開始,向上查找同一包或父包中帶有 @SpringBootApplication@SpringBootConfiguration注解的類,作為應(yīng)用的配置類

  顯式指定:如果 @SpringBootTest 無法自動找到 @SpringBootApplication 注解的配置類,或者你希望手動指定配置類,你可以在@SpringBootTest 注解中使用classes屬性顯式指定應(yīng)用的配置類

4、生成單元測試類

在需要生成單元測試的類中按Alt +Ins,選擇test(測試)

選擇測試方法

生成的測試類放入與本類相同的包結(jié)構(gòu)

在這里插入圖片描述

三、常用注解

1、@BeforeAll

用于在所有測試方法之前執(zhí)行的靜態(tài)初始化代碼

通常用于在執(zhí)行所有測試之前進(jìn)行一次性設(shè)置,例如建立數(shù)據(jù)庫連接、初始化共享資源等

被注解的方法必須是static

@BeforeAll
static void setup() {
    System.out.println("Running setup before all tests...");
}

2、@AfterAll

  • 用于在所有測試方法執(zhí)行完成后運行的靜態(tài)清理代碼
  • 通常用于釋放資源、關(guān)閉連接等操作
  • 被注解的方法必須是static
@AfterAll
static void tearDown() {
    System.out.println("Running teardown after all tests...");
}

3、@BeforeEach

  • 用于在每個測試方法之前執(zhí)行的初始化代碼
  • 常用于在每個測試方法執(zhí)行之前準(zhǔn)備一些通用的數(shù)據(jù)或環(huán)境
@BeforeEach
void init() {
    System.out.println("Running setup before each test...");
}

4、@AfterEach

  • 用于在每個測試方法之后執(zhí)行的清理代碼
  • 常用于在每個測試方法之后恢復(fù)原狀或清理一些資源
@AfterEach
void cleanup() {
    System.out.println("Running cleanup after each test...");
}

5、@DisplayName

用于為測試類或測試方法提供一個更具可讀性或說明性的名稱,便于在測試報告中展示

6、@Disabled

當(dāng)執(zhí)行所有測試方法時候,@Disabled注解的方法不會執(zhí)行

7、@RepeatedTest

用于多次重復(fù)執(zhí)行某個測試,可以指定重復(fù)次數(shù)

四、常用斷言

  斷言(Assertions)在單元測試中用于驗證程序行為是否符合預(yù)期。JUnit 提供了一組用于編寫斷言的方法,斷言的使用可以幫助判斷測試是否通過。類名org.junit.jupiter.api.Assertions

1、assertEquals(expected, actual)

  • 驗證兩個對象是否相等
  • 可以用于各種數(shù)據(jù)類型,包括基本類型、對象等
assertEquals(5, 2 + 3);
assertEquals("Hello", greetingService.getGreeting());

2、assertNotEquals(expected, actual)

驗證兩個對象是否不相等

assertNotEquals(10, 2 + 3);

3、assertTrue(condition)

驗證條件為true

assertTrue(5 > 3);

4、assertFalse(condition)

驗證條件為false

assertFalse(3 > 5);

5、assertNull(actual)

驗證對象是否為null

String str = null;
assertNull(str);

6、assertNotNull(actual)

驗證對象是否不為null

String str = "Hello";
assertNotNull(str);

7、assertArrayEquals(expected, actual)

驗證兩個數(shù)組是否相等

數(shù)組的長度和元素的順序都必須相同

int[] expected = {1, 2, 3};
int[] actual = {1, 2, 3};
assertArrayEquals(expected, actual);

8、assertSame(expected, actual)

驗證兩個對象引用是否指向同一個對象(即是同一個對象的引用)

Object obj = new Object();
assertSame(obj, obj);

9、assertNotSame(expected, actual)

驗證兩個對象引用是否不指向同一個對象

Object obj1 = new Object();
Object obj2 = new Object();
assertNotSame(obj1, obj2);

10、fail(message)

強制使測試失敗

通常用于標(biāo)記不應(yīng)該被執(zhí)行的代碼路徑

if (someCondition) {
    fail("Unexpected condition occurred");
}

11、帶有消息參數(shù)的斷言

  JUnit的斷言方法通常有一個變體,可以帶有一個額外的字符串參數(shù),用于在測試失敗時提供錯誤消息,幫助更快找到問題。

五、@MockBean注入

1、@MockBean的主要作用

@MockBean會將應(yīng)用上下文中的某個Bean替換為模擬的Bean(Mock 對象)

@MockBean自動與Spring上下文集成,允許模擬的Bean被注入到需要它的其他Bean中

2、@MockBean的典型用法(模擬數(shù)據(jù)層)

  假設(shè)我們有一個UserService依賴于UserRepository,而我們在測試中不想使用真實的UserRepository,而是使用模擬對象。

@Service
public class UserService {
    private final UserRepository userRepository;
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    public User getUserById(Long id) {
        return userRepository.findById(id);
    }
}
  • 使用@MockBean來模擬UserRepository
  • given方法模擬了userRepository.findById(1L) 方法的調(diào)用,并定義了當(dāng)該方法被調(diào)用時,willReturn表示返回一個mockUser對象
import org.junit.jupiter.api.Test;
import org.mockito.BDDMockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.BDDMockito.given;
@SpringBootTest
public class UserServiceTest {
    @Autowired
    private UserService userService;
    // 模擬 UserRepository,替換掉應(yīng)用上下文中的實際 Bean
    @MockBean
    private UserRepository userRepository;
    @Test
    void testGetUserById() {
        // 創(chuàng)建模擬數(shù)據(jù)
        User mockUser = new User(1L, "John Doe");
        // 使用 Mockito 的 BDD 風(fēng)格方法設(shè)置模擬行為
        given(userRepository.findById(1L)).willReturn(mockUser);
        // 調(diào)用服務(wù)層方法,驗證返回值是否符合預(yù)期
        User result = userService.getUserById(1L);
        assertEquals("John Doe", result.getName());
    }
}

到此這篇關(guān)于SpringBoot 集成JUnit5的文章就介紹到這了,更多相關(guān)SpringBoot 集成JUnit5內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java通過復(fù)選框控件數(shù)組實現(xiàn)添加多個復(fù)選框控件示例分享

    java通過復(fù)選框控件數(shù)組實現(xiàn)添加多個復(fù)選框控件示例分享

    編寫程序,通過復(fù)選框控件數(shù)組事先選擇用戶愛好信息的復(fù)選框,在該程序中,要求界面中的復(fù)選框數(shù)量可以根據(jù)指定復(fù)選框名稱的字符串?dāng)?shù)組的長度來自動調(diào)節(jié)
    2014-02-02
  • mybatis in查詢條件過長的解決方案

    mybatis in查詢條件過長的解決方案

    這篇文章主要介紹了mybatis in查詢條件過長的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • spring?boot配置dubbo方式(properties)

    spring?boot配置dubbo方式(properties)

    這篇文章主要介紹了spring?boot配置dubbo方式(properties),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Mybatis攔截器的實現(xiàn)介紹

    Mybatis攔截器的實現(xiàn)介紹

    MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實這是攔截器功能。MyBatis 允許你在已映射語句執(zhí)行過程中的某一點進(jìn)行攔截調(diào)用。下面通過本文給大家介紹Mybatis攔截器知識,感興趣的朋友一起看看吧
    2016-10-10
  • java圖形界面編程之模擬血壓計

    java圖形界面編程之模擬血壓計

    本文主要介紹了java基于圖形處理的模擬血壓計,創(chuàng)新實驗項目的部分代碼,作為平時練習(xí)用。
    2014-02-02
  • 深入理解spring多數(shù)據(jù)源配置

    深入理解spring多數(shù)據(jù)源配置

    項目中我們經(jīng)常會遇到多數(shù)據(jù)源的問題,尤其是數(shù)據(jù)同步或定時任務(wù)等項目更是如此。本篇文章主要介紹了spring多數(shù)據(jù)源配置,有興趣的可以了解一下。
    2017-01-01
  • Springboot 如何指定獲取出 yml文件里面的配置值

    Springboot 如何指定獲取出 yml文件里面的配置值

    這篇文章主要介紹了Springboot 如何指定獲取出 yml文件里面的配置值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java字符串轉(zhuǎn)駝峰格式的方法

    Java字符串轉(zhuǎn)駝峰格式的方法

    在開發(fā)場景中,我們會遇到一些涉及字符串的轉(zhuǎn)化,本文主要介紹了Java字符串轉(zhuǎn)駝峰格式的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 用Java打印九九除法表代碼分析

    用Java打印九九除法表代碼分析

    這篇文章主要介紹了如何用Java語言打印九九除法表,包括其使用的源代碼,需要的朋友可以參考下。
    2017-08-08
  • Android圖片轉(zhuǎn)換器代碼分享

    Android圖片轉(zhuǎn)換器代碼分享

    本文給大家總結(jié)了下在安卓程序中進(jìn)行圖片轉(zhuǎn)換的方法,非常的實用,小伙伴們可以參考下。
    2015-10-10

最新評論