最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、JUnit5介紹

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

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

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

2、什么是單元測(cè)試

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

二、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>

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

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

2、測(cè)試類和測(cè)試方法不需要聲明為public

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

3、@SpringBootTest工作原理

 它會(huì)啟動(dòng)整個(gè)Spring容器,加載應(yīng)用程序的所有Bean,并創(chuàng)建一個(gè)完整的應(yīng)用上下文。這是集成測(cè)試,因?yàn)樗M了應(yīng)用程序的真實(shí)運(yùn)行環(huán)境。

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

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

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

4、生成單元測(cè)試類

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

選擇測(cè)試方法

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

在這里插入圖片描述

三、常用注解

1、@BeforeAll

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

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

被注解的方法必須是static

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

2、@AfterAll

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

3、@BeforeEach

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

4、@AfterEach

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

5、@DisplayName

用于為測(cè)試類或測(cè)試方法提供一個(gè)更具可讀性或說(shuō)明性的名稱,便于在測(cè)試報(bào)告中展示

6、@Disabled

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

7、@RepeatedTest

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

四、常用斷言

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

1、assertEquals(expected, actual)

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

2、assertNotEquals(expected, actual)

驗(yàn)證兩個(gè)對(duì)象是否不相等

assertNotEquals(10, 2 + 3);

3、assertTrue(condition)

驗(yàn)證條件為true

assertTrue(5 > 3);

4、assertFalse(condition)

驗(yàn)證條件為false

assertFalse(3 > 5);

5、assertNull(actual)

驗(yàn)證對(duì)象是否為null

String str = null;
assertNull(str);

6、assertNotNull(actual)

驗(yàn)證對(duì)象是否不為null

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

7、assertArrayEquals(expected, actual)

驗(yàn)證兩個(gè)數(shù)組是否相等

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

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

8、assertSame(expected, actual)

驗(yàn)證兩個(gè)對(duì)象引用是否指向同一個(gè)對(duì)象(即是同一個(gè)對(duì)象的引用)

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

9、assertNotSame(expected, actual)

驗(yàn)證兩個(gè)對(duì)象引用是否不指向同一個(gè)對(duì)象

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

10、fail(message)

強(qiáng)制使測(cè)試失敗

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

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

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

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

五、@MockBean注入

1、@MockBean的主要作用

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

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

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

  假設(shè)我們有一個(gè)UserService依賴于UserRepository,而我們?cè)跍y(cè)試中不想使用真實(shí)的UserRepository,而是使用模擬對(duì)象。

@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來(lái)模擬UserRepository
  • given方法模擬了userRepository.findById(1L) 方法的調(diào)用,并定義了當(dāng)該方法被調(diào)用時(shí),willReturn表示返回一個(gè)mockUser對(duì)象
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)用上下文中的實(shí)際 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àn)證返回值是否符合預(yù)期
        User result = userService.getUserById(1L);
        assertEquals("John Doe", result.getName());
    }
}

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

相關(guān)文章

最新評(píng)論

定安县| 仁化县| 时尚| 全椒县| 芮城县| 北票市| 安图县| 岳阳县| 高安市| 德惠市| 裕民县| 方山县| 通州区| 鄯善县| 海晏县| 吴堡县| 团风县| 贵州省| 乌鲁木齐市| 江门市| 新安县| 乐清市| 永寿县| 江山市| 巧家县| 临江市| 库车县| 赣州市| 清徐县| 双牌县| 曲沃县| 公安县| 尤溪县| 屏南县| 独山县| 天津市| 舒兰市| 分宜县| 湛江市| 南华县| 会宁县|