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

Rainbow-Sea發表於2024-05-20

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

@

目錄
  • 1. Spring 對 Junit4,Junit5 的支援上的運用
  • 每博一文案
  • 2. Spring對Junit4 的支援
  • 3. Spring對Junit5的支援
  • 4. 總結:
  • 5. 最後:


每博一文案

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

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. 最後:

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

在這裡插入圖片描述

相關文章