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. 總結:
- Spring 對 Junit4 的依賴的 jar 包,同時
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring.xml") // 注意該:spring.xml 檔案要一定要在類路徑下才行
- 同時注意:該Juit4的@Test 的註解是在:org.junit.Test; 包下的
- Spring 對 Junit5 的依賴的 jar 包,同時
@ExtendWith(SpringExtension.class) @ContextConfiguration("classpath:spring.xml") // 同樣一定要是在類路徑下
- 無論是 Junit4 還是 Junit5 當中的 @ContextConfiguration 註解當中的 @ContextConfiguration("classpath:spring.xml") 都是:一定要是在類路徑下才行的。
- 關於:Spring 對 Junit4,Junit5 的支援運用,大家靈活選擇運用即可,並不是非要選擇其中的哪個哪個啥的。滿足業務即可。
5. 最後:
“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”