日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么單元測試應與集成測試分開運行

單元測試級別的TDD相當簡單,因為單元測試中的類要么沒有復雜的依賴關系,要么使用模擬框架(例如Mockito)來模擬依賴關系。 但是,當我們進入集成測試時,TDDSwift變得困難。 集成測試基本上是在測試具有部分或全部依賴關系的組件,而不是完全模擬它們。 示例包括跨多個層的測試,讀取或寫入數據庫或文件系統的測試,需要啟動Servlet容器或EJB容器的測試,涉及網絡通信,Web服務的測試等。

集成測試往往比較脆弱和/或緩慢 。 例子:

  • 與數據庫對話的測試可能不會失敗,不是因為代碼中的邏輯錯誤,而是因為數據庫已關閉,數據庫的URL /用戶名/密碼已更改,或者數據庫中的數據有誤。
  • 讀取或寫入磁盤的測試很慢,并且每次運行測試時,都需要使用正確的數據或內容來重置文件或數據庫。
  • 打包和部署到容器很慢。
  • 進行網絡調用的測試失敗可能不是因為代碼中的邏輯錯誤,而是因為網絡資源不可用,或者網絡本身存在問題。

這些麻煩往往會阻止開發人員頻繁運行測試。 當測試運行的次數很少時,開發人員最終會在捕獲錯誤之前編寫大量代碼。 因此,當不經常運行測試時,生產力下降,因為編寫大量代碼后更難發現和修復錯誤,并且存在質量問題的風險增加。 同樣,當運行測試很麻煩時,不鼓勵開發人員編寫足夠的測試。

因此,將單元測試與集成測試分開運行是有意義的。 單元測試完全在內存中運行,沒有任何外部依賴關系,因此,即使對于大型項目,它們也都應該在短短幾秒鐘內運行,并且每次都應可靠運行,因為它們僅取決于被測代碼的邏輯。 因此,鼓勵開發人員進行每一個小的更改就可以運行所有單元測試。

使用Maven故障保護和JUnit @Category進行集成測試

分離集成測試的方法不止一種。 默認情況下,故障保護會選擇后綴為“ IT”或“ ITCase”或以“ IT”為前綴的任何類。 但是,某些測試框架也需要后綴或前綴,這使得使用該方法很麻煩。 另一種方法是將集成測試放在單獨的源目錄中。 我選擇使用JUnit @Category,因為我還使用了Concordion,它的測試類中需要一個后綴。

本文的其余部分僅記錄了我如何實施John Doble在2012年發表的名為“使用Maven和JUnit類別進行單元和集成測試”的建議 。 您可以在這里找到我的源代碼 。

創建JUnit類別

創建一個JUnit類別只是簡單地創建一個空接口。 真的,就是這樣! 見下文:

package com.orangeandbronze.test;public interface IntegrationTest {}

現在,我可以將此“標記接口”作為類別應用于我的集成測試-在下面的示例中,應用于SectionDaoTest。

import org.junit.experimental.categories.Category; import com.orangeandbronze.test.IntegrationTest;@Category(IntegrationTest.class) public class SectionDaoTest extends DaoTest {... }

添加Surefire和故障安全插件

現在添加Surefire和Failsafe插件。 我需要排除Surefire(運行單元測試)中IntegrationTest標記的所有測試,并在Failsafe(運行集成測試)中包括IntegrationTest標記的所有測試。 另外,我必須包含“ ** / *。java”,否則測試將無法運行,我也不知道為什么。

<plugin><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration><excludedGroups>com.orangeandbronze.test.IntegrationTest</excludedGroups></configuration> </plugin> <plugin><artifactId>maven-failsafe-plugin</artifactId><version>2.18.1</version><configuration><includes><include>**/*.java</include></includes><groups>com.orangeandbronze.test.IntegrationTest</groups></configuration><executions><execution><goals><goal>integration-test</goal><goal>verify</goal></goals></execution></executions> </plugin>

運行測試

所以現在,當我運行mvn test時,僅運行單元測試,而當我運行mvn Integration-test或mvn verify (通常運行mvn verify)時,不僅會運行單元測試,而且我的項目也會打包,然后集成測試運行。

在一個真實的項目中,每個開發人員只需進行幾次更改即可運行所有的單元測試,一天要進行數十次,而他將不那么頻繁地運行集成測試,但每天至少要運行一次。 CI服務器還將在其構建期間運行單元測試和集成測試。

翻譯自: https://www.javacodegeeks.com/2015/01/separating-integration-tests-from-unit-tests-using-maven-failsafe-junit-category.html

總結

以上是生活随笔為你收集整理的使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。