maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
maven junit測試
為什么單元測試應與集成測試分開運行
單元測試級別的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 junit測試
總結
以上是生活随笔為你收集整理的maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科技昨夜今晨 0923:小米 14 系列
- 下一篇: 总攻是什么意思 总攻具体是什么意思