寫在前面
🛫更多知識總結見SpringBoot 2專欄
🚕本篇知識點總結自尚硅谷雷神的視頻
🚒博主對于該知識尚在學習階段
🚄如果發現存在問題請毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客首頁🚀🚀
文章目錄
- 1 單元測試JUnit 5
- 1.1JUnit 5簡介以及使用
- 1.2 常用的測試注解
- 1.3 斷言(assertions)
- 1.4 前置條件(assumptions)
- 1.5 嵌套測試
- 1.6 參數化測試
- 2 指標監控
- 2.1 使用url實現監控
- 2.2 可視化的監控平臺
1 單元測試JUnit 5
1.1JUnit 5簡介以及使用
??JUnit5作為最新版本的JUnit框架與之前版本的Junit框架有很大的不同。JUnit5主要由三個不同子項目的幾個不同模塊組成:JUnit Platform、JUnit Jupiter、JUnit Vintage。
- JUnit Platform: 它是在JVM上啟動測試框架的基礎,不僅支持Junit自制的測試引擎,其他測試引擎也都可以接入。
- JUnit Jupiter: 提供了JUnit5的新的編程模型,是JUnit5新特性的核心。內部 包含了一個測試引擎,用于在Junit Platform上運行。
- JUnit Vintage: 由于JUint已經發展多年,為了照顧老的項目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的測試引擎。
??在這里我們需要了解的是:SpringBoot 2.4 以上版本移除了默認對JUnit Vintage的依賴。如果需要兼容junit4需要自行引入,不引入的話就不能使用junit4的功能@Test,但是JUnit5也有一個@Test注解能夠完成同樣的功能
使用:
??由上面的JUnit5分析可知:要想使用JUnit5并兼容JUnit以前的版本的話,必須引用以下兩個依賴
<!--測試的啟動器依賴-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
<!--兼容JUnit4版本的單元測試-->
<dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId></exclusion></exclusions>
</dependency>
然后使用@SpringBootTest注解標注測試類,使用@Test標注測試方法
1.2 常用的測試注解
??官方文檔中已經定義并解釋了所有的注解,可以通過這個鏈接進行查看官方文檔的鏈接地址接下來會選取常用的幾個注解進行講解學習
- @SpringBootTest和@Test不再贅述
- @DisplayName注解:控制臺磚展示名
- @BeforeEach注解:每個方法執行之前執行@AfterEach注解:每個方法執行之后執行
- @BeforeAll注解:所有方法執行之前執行@AfterAll注解:所有方法執行之后執行
值得注意的是,這兩個注解的修飾的方法都必須使用static修飾 - @Disable注解:在運行測試類的時候禁用這個方法,可以單獨執行
- @Timeout注解:設置測試方法的執行時間,超過這個時間則拋異常
- @ExtendWith注解:設置測試類的測試驅動,@SpringBootTest注解是個復合注解,其中底層就有@ExtendWith注解指定了測試類使用的是SpringBoot的測試驅動
- @RepeatedTest注解:指定方法重復次數
1.3 斷言(assertions)
??斷言是測試方法中的核心部分,用來對測試需要滿足的條件進行驗證。所謂斷言就是檢查業務邏輯返回的數據是否合理,在所有的測試運行結束以后,會產生一個詳細的測試報告。值得注意的是:當出現一個斷言失敗之后,從那個斷言開始后面的所有代碼都不會執行
JUnit 5 內置的斷言可以分成如下幾個類別:
- 簡單斷言
以上方法的用法如下(以assertEquals方法為例):
- 數組斷言
- 組合斷言
??組合斷言需要所有的參數都滿足的情況下才會通過,否則會返回出錯的斷言,可以以用來一個方法進行多個簡單斷言 - 異常斷言
??當結果不拋出定義的異常時斷言失敗
- 超時斷言
??當超出定義的超時時間就會返回斷言 - 快速斷言
??當符合邏輯的時候就會返回斷言
??使用斷言的好處就是:可以使用以下圖片中的方法將測試類的所有方法跑一遍,如果斷言都通過則正常運行。否則就會返回所有的斷言失敗的信息
1.4 前置條件(assumptions)
??JUnit 5 中的前置條件(又叫假設)類似于斷言,不同之處在于不滿足的斷言會使得測試方法失敗,而不滿足的前置條件只會使得測試方法的執行終止。前置條件可以看成是測試方法執行的前提,當該前提不滿足時,就沒有繼續執行的必要。由上圖可知,前置條件與斷言最大的區別就是前置條件不滿足的情況下,跳過該方法繼續執行別的方法,而不滿足斷言的話后面的代碼都將不會執行
1.5 嵌套測試
??嵌套測試即是測試類中還有測試類,在這種情況下,外層的test不能驅動內層的Before(After)All(Each)方法,但是內層的test可以驅動外層的Before(After)All(Each)方法。
1.6 參數化測試
- @ValueSource: 為參數化測試指定入參來源,支持八大基礎類以及String類型,Class類型
- @NullSource: 為測試方法提供參數為null
- @EnumSource: 為測試方法提供枚舉參數
- @CsvFileSource: 讀取指定CSV文件內容作為參數化測試入參
- @MethodSource: 讀取指定方法的返回值作為參數化測試入參(但是該方法的返回必須是一個Stream流)
2 指標監控
2.1 使用url實現監控
引用Actuator啟動器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
使用配置文件開啟想要的端點
management:endpoints:enabled-by-default: false # 默認開啟所有的監控端點,定制化的話就需要關閉web:exposure:include: '*' # 以web的方式暴露所有的端點endpoint:beans:enabled: truehealth:enabled: trueshow-details: alwaysinfo:enabled: truemetrics:enabled: true
使用url查看監控信息
2.2 可視化的監控平臺
使用Spring Initializr快速創建一個SpringBoot項目,項目的pom文件加入服務監控平臺的依賴,并在該項目的主程序類上加入@EnableAdminServer注解
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.3.1</version>
</dependency>
為了防止與需要監控的服務產生端口沖突,需要在配置文件中修改監控的端口號
server:port: 8888
將其他的服務注冊進監控
第一步: 被監控的服務中導入依賴
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>2.3.1</version>
</dependency>
第二步: 被監控的服務中配置文件配置監控項目的url
spring:boot:admin:client:url: http://localhost:8888instance:prefer-ip: trueapplication:name: Project-admin_manage