Spring 對 Junit4,Junit5 的支持上的運用

来源:https://www.cnblogs.com/TheMagicalRainbowSea/p/18202982
-Advertisement-
Play Games

1. Spring 對 Junit4,Junit5 的支持上的運用 @目錄1. Spring 對 Junit4,Junit5 的支持上的運用每博一文案2. Spring對Junit4 的支持3. Spring對Junit5的支持4. 總結:5. 最後: 每博一文案 關於理想主義,在知乎上看到一句話: ...


1. Spring 對 Junit4,Junit5 的支持上的運用

@

目錄


每博一文案

關於理想主義,在知乎上看到一句話:“他們並不是不懂別人口中的現實,他們只是不信,事情只能是現在這個樣子。”
     錯誤的、骯髒的、混亂的、輕鬆自如的、自言儘力了,有人真的不懂麽?為了利益和怠惰做出這樣那樣或好或壞的事情,什麼動物都會。有人會開脫和找藉口,說著現實就是如此啊,無力改變世界就改變自己啊。他們對現狀搖搖頭然後果斷投入到漆黑的污水裡去,義無反顧地。
     但理想主義者是不信的,他們先是在語言上畫一個大問號,再用行動畫一個大嘆號。
     他先問你,怎麼就非得這樣不可?怎麼就沒了別的辦法?然後再用做出來的事情告訴你,我告訴你就是還能有更乾凈、更溫和、更有效的辦法!
     他們自己也有不能一塵不染的時候。但他們看著滿目漆黑也不信世界上就沒有潔白、乾凈這回事。
     理想主義者就是不會相信生活和世界就是這樣了。不管它是別人眼中的好,還是壞。
   “一定有更好的辦法,也能夠通過合理的方式,緩慢地改善世界。願意為了自己的理想而做些什麼,甚至也願意去犧牲什麼。對於自己的手段、目的與認知,始終心懷疑問。即使做出的一切都看不到所謂的成效。即使這改變在活著的時候甚至也看不到。知道世界比較容易被忍受的這部分,是很多人用了很多代價換來的。但不會停下對好的東西的嚮往,還有向光明的地方行走的腳步。”
     這才算理想主義者吧。往往是重視精神價值超過物質利益。理想主義者把對精神價值的追求看作人生的主要追求,這些精神價值包括:尊嚴、正義、愛、美等等。
    而浪漫主義,諾瓦利斯說過:
   “在我看來,把普通的東西賦予崇高的意義,給平凡的東西披上神秘的外衣,使熟知的東西恢復未知的尊嚴,對有限的東西給予無限的外觀,這就是浪漫化。反過來說,這就是變得崇高、未知、神秘和無限的過程,通過這種聯繫,這一浪漫化過程就會被對數化。它得到一個常用的表達:浪漫哲學。”

2. Spring對Junit4 的支持

準備工作,先在pom.xml 文件當中,導入相關依賴的 jar 包信息,如下:

在這裡插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>spring6-015-junit</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <!--倉庫-->
    <repositories>
        <!--spring里程碑版本的倉庫-->
        <repository>
            <id>repository.spring.milestone</id>
            <name>Spring Milestone Repository</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

    <dependencies>
        <!--        spring context 依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.11</version>
        </dependency>

        <!--        spring 對 Junit 支持的依賴-->
        <!--spring對junit的支持相關依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <!--            這個版本spring6,既支持Junit4 又支持Junit5-->
            <version>6.0.11</version>
        </dependency>

        <!--        junit4依賴-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!--        @Resoure 註解 非簡單類型的註入,賦值-->
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.1</version>
        </dependency>


    </dependencies>

</project>

準備好,對於的 Bean 對象用於測試:註意:需要將其 Bean 對象納入到 Spring IOC 容器當中進行管理上。

在這裡插入圖片描述

package com.rainbowsea.spring6.bean;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component(value = "user")   // 交給 Spirng IOC 容器管理
public class User {
    @Value("張三") // spring 當中 value()註解簡單類型的,set註入,賦值
    private String name;

    public User(String name) {
        this.name = name;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

配置相關的:spring.xml 的配置信息的內容,這裡我們用的是註解時開發,需要加上一個組件掃描

在這裡插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

<!--    組件掃描-->
    <context:component-scan base-package="com.rainbowsea.spring6.bean"></context:component-scan>
</beans>

單元測試:(一般平常的單元測試)如下:

在這裡插入圖片描述

在這裡插入圖片描述

上述:方式,代碼重覆率高,復用性較差。

Spring提供的方便主要是這幾個註解:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")註意該:spring.xml 文件要一定要在類路徑下才行
在單元測試類上使用這兩個註解之後,在單元測試類中的屬性上可以使用 @Autowired。比較方便。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml") // 註意該:spring.xml 文件要一定要在類路徑下才行

優化如下:

在這裡插入圖片描述

在這裡插入圖片描述

使用@Resource 需要導入相關的 jar 包,如下:

在這裡插入圖片描述

<!--        @Resoure 註解 非簡單類型的註入,賦值-->
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.1</version>
        </dependency>

在這裡插入圖片描述

同時註意:該Juit4的@ Test 的註解是在:org.junit.Test; 包下的

在這裡插入圖片描述

package com.rainbowsea.spring6.test;

import com.rainbowsea.spring6.bean.User;
import jakarta.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJunit4Test2 {

    @Resource(name = "user")
    private User user;

    @Test
    public void testUser() {
        System.out.println(user.getName());
    }


    @Test
    public void testUser2() {
        System.out.println(user.getName());
    }

    @Test
    public void testUser3() {
        System.out.println(user.getName());
    }


}

3. Spring對Junit5的支持

引入JUnit5的依賴,Spring對JUnit支持的依賴還是:spring-test,同時換成,junit5 ,還是在 pom.xml 文件當值配置相關依賴的 jar 如下:

在這裡插入圖片描述

 <!--        junit5 依賴-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.9.0</version>
            <scope>test</scope>
        </dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>spring6-015-junit</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <!--倉庫-->
    <repositories>
        <!--spring里程碑版本的倉庫-->
        <repository>
            <id>repository.spring.milestone</id>
            <name>Spring Milestone Repository</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

    <dependencies>
        <!--        spring context 依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.11</version>
        </dependency>

        <!--        spring 對 Junit 支持的依賴-->
        <!--spring對junit的支持相關依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <!--            這個版本spring6,既支持Junit4 又支持Junit5-->
            <version>6.0.11</version>
        </dependency>

        <!--        junit5 依賴-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.9.0</version>
            <scope>test</scope>
        </dependency>

        <!--        @Resoure 註解 非簡單類型的註入,賦值-->
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.1</version>
        </dependency>




    </dependencies>

</project>


還是使用上面的 User 的 bean 對象進行測試:

在這裡插入圖片描述

在JUnit5當中,可以使用Spring提供的以下兩個註解,標註到單元測試類上,這樣在類當中就可以使用@Autowired註解了。

@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml")  // 同樣一定要是在類路徑下

@ContextConfiguration("classpath:spring.xml") // 同樣一定要是在類路徑下

在這裡插入圖片描述

同時註意:該Juit5 的@ Test 的註解是在:org.junit.jupiter.api.Test 包下的 ,選擇的時候不要,弄錯了。

在這裡插入圖片描述

單元測試:

在這裡插入圖片描述

package com.rainbowsea.spring6.test;


import com.rainbowsea.spring6.bean.User;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringJunit5Test {

    @Resource(name = "user")  // 非簡單類型的註入,賦值,交給Spring管理
    private User user;


    @Test  // import org.junit.jupiter.api.Test;
    public void testUser() {
        System.out.println(user.getName());
    }


    @Test  // import org.junit.jupiter.api.Test;
    public void testUser2() {
        System.out.println(user.getName());
    }

    @Test  // import org.junit.jupiter.api.Test;
    public void testUser3() {
        System.out.println(user.getName());
    }



}

4. 總結:

  1. Spring 對 Junit4 的依賴的 jar 包,同時
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml") // 註意該:spring.xml 文件要一定要在類路徑下才行
  1. 同時註意:該Juit4的@Test 的註解是在:org.junit.Test; 包下的
  2. Spring 對 Junit5 的依賴的 jar 包,同時
@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:spring.xml")  // 同樣一定要是在類路徑下
  1. 無論是 Junit4 還是 Junit5 當中的 @ContextConfiguration 註解當中的 @ContextConfiguration("classpath:spring.xml") 都是:一定要是在類路徑下才行的。
  2. 關於:Spring 對 Junit4,Junit5 的支持運用,大家靈活選擇運用即可,並不是非要選擇其中的哪個哪個啥的。滿足業務即可。

5. 最後:

“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關註和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”

在這裡插入圖片描述


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在XML Schema(XSD)中,複雜元素包含其他元素和/或屬性,分為4類:空元素、僅含元素、僅含文本和既含元素也含文本。定義複雜元素可通過直接聲明或引用預定義的複雜類型。複雜空元素僅含屬性,而僅含元素的類型則只包含其他子元素。XSD提供了`<xs:sequence>`、`<xs:all>`、`<... ...
  • 一、是什麼 事件代理,俗地來講,就是把一個元素響應事件(click、keydown......)的函數委托到另一個元素 前面講到,事件流的都會經過三個階段: 捕獲階段 -> 目標階段 -> 冒泡階段,而事件委托就是在冒泡階段完成 事件委托,會把一個或者一組元素的事件委托到它的父層或者更外層元素上,真 ...
  • 之前已經出了一篇關於loading動畫的隨筆《博客園美化:給網頁加上loading動畫》,但是每次載入都必須等loading動畫載入完成才能進行下一步點擊,很浪費時間,所以pass掉了...... 這次做了一個頂部的loading進度條,載入的同時不影響瀏覽點擊網頁,並且進度條顏色十分酷炫( 非主流 ...
  • vue3+uniapp多端自定義table組件|uniapp加強版綜合表格組件 uv3-table:一款基於uniapp+vue3跨端自定義手機端增強版表格組件。支持固定表頭/列、邊框、斑馬紋、單選/多選,自定義表頭/表體插槽、左右固定列陰影高亮顯示。支持編譯相容H5+小程式端+App端。 如下圖: ...
  • 一、事件與事件流 javascript中的事件,可以理解就是在HTML文檔或者瀏覽器中發生的一種交互操作,使得網頁具備互動性, 常見的有載入事件、滑鼠事件、自定義事件等 由於DOM是一個樹結構,如果在父子節點綁定事件時候,當觸發子節點的時候,就存在一個順序問題,這就涉及到了事件流的概念 事件流都會經 ...
  • 在前端開發過程中,調試的時候,我門會使用 console.log 等方式查看數據。但對於圖片來說,僅靠展示的數據與結構,是無法想象出圖片最終呈現的樣子的。 雖然我們可以把圖片數據通過 img 標簽展示到頁面上,或將圖片下載下來進行預覽。但這樣的調試過程實在是複雜,何不實現一個 console.im... ...
  • 目錄又被攻擊了?事實還原怎樣避免被攻擊 又被攻擊了? 前段時間每天早上都被阿裡雲的報警簡訊和郵件叫醒,給看一下記錄。 事實還原 我當時以為是有幾篇被其他博主轉發了文章,導致被知名度(狗頭)上升,被人盯上了。每天早上 6、7點手機就開始報警。上一篇文章發出去後,也收到很多小伙伴的支持。 進過分析,觸發 ...
  • 工業互聯網甄選聯盟自發佈委員會管理制度以來,得到了廣大朋友的支撐。經過反覆溝通和醞釀,最終形成《基於工業互聯網平臺智能製造方案》。在今後的實踐過程中會不斷完善本方案。現在入選4家會員單位,後續再不斷擇優選取腳踏實地為生產企業服務的公司。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...