maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
maven junit測(cè)試
為什么單元測(cè)試應(yīng)與集成測(cè)試分開運(yùn)行
單元測(cè)試級(jí)別的TDD相當(dāng)簡(jiǎn)單,因?yàn)閱卧獪y(cè)試中的類要么沒有復(fù)雜的依賴關(guān)系,要么使用模擬框架(例如Mockito)來模擬依賴關(guān)系。 但是,當(dāng)我們進(jìn)入集成測(cè)試時(shí),TDDSwift變得困難。 集成測(cè)試基本上是在測(cè)試具有部分或全部依賴關(guān)系的組件,而不是全部模擬它們。 示例包括跨多個(gè)層的測(cè)試,讀取或?qū)懭霐?shù)據(jù)庫或文件系統(tǒng)的測(cè)試,需要啟動(dòng)Servlet容器或EJB容器的測(cè)試,涉及網(wǎng)絡(luò)通信,Web服務(wù)的測(cè)試等。
集成測(cè)試往往比較脆弱和/或緩慢 。 例子:
- 與數(shù)據(jù)庫對(duì)話的測(cè)試可能不會(huì)失敗,不是因?yàn)榇a中的邏輯錯(cuò)誤,而是因?yàn)閿?shù)據(jù)庫已關(guān)閉,數(shù)據(jù)庫的URL /用戶名/密碼已更改,或者數(shù)據(jù)庫中的數(shù)據(jù)有誤。
- 讀取或?qū)懭氪疟P的測(cè)試速度很慢,并且每次運(yùn)行測(cè)試時(shí),都需要使用正確的數(shù)據(jù)或內(nèi)容來重置文件或數(shù)據(jù)庫。
- 打包和部署到容器很慢。
- 進(jìn)行網(wǎng)絡(luò)調(diào)用的測(cè)試失敗可能不是因?yàn)榇a中的邏輯錯(cuò)誤,而是因?yàn)榫W(wǎng)絡(luò)資源不可用,或者網(wǎng)絡(luò)本身存在問題。
這些麻煩往往會(huì)阻止開發(fā)人員頻繁運(yùn)行測(cè)試。 當(dāng)測(cè)試運(yùn)行的次數(shù)很少時(shí),開發(fā)人員最終會(huì)在捕獲錯(cuò)誤之前編寫大量代碼。 因此,當(dāng)不經(jīng)常運(yùn)行測(cè)試時(shí),生產(chǎn)率下降,因?yàn)榫帉懘罅看a后更難發(fā)現(xiàn)和修復(fù)錯(cuò)誤,并且存在質(zhì)量問題的風(fēng)險(xiǎn)增加。 同樣,當(dāng)運(yùn)行測(cè)試很麻煩時(shí),不鼓勵(lì)開發(fā)人員編寫足夠的測(cè)試。
因此,將單元測(cè)試與集成測(cè)試分開運(yùn)行是有意義的。 單元測(cè)試完全在內(nèi)存中運(yùn)行,沒有任何外部依賴關(guān)系,因此,即使對(duì)于大型項(xiàng)目,它們也都應(yīng)該在短短幾秒鐘之內(nèi)運(yùn)行,并且每次都應(yīng)穩(wěn)定運(yùn)行,因?yàn)樗鼈儍H取決于被測(cè)代碼的邏輯。 因此,鼓勵(lì)開發(fā)人員進(jìn)行每一個(gè)小的更改就可以運(yùn)行所有單元測(cè)試。
使用Maven故障保護(hù)和JUnit @Category進(jìn)行集成測(cè)試
分離集成測(cè)試的方法不止一種。 默認(rèn)情況下,故障保護(hù)會(huì)選擇后綴為“ IT”或“ ITCase”或以“ IT”為前綴的任何類。 但是,某些測(cè)試框架也需要后綴或前綴,這使得使用該方法很麻煩。 另一種方法是將集成測(cè)試放在單獨(dú)的源目錄中。 我選擇使用JUnit @Category,因?yàn)槲疫€使用了Concordion,它的測(cè)試類中需要一個(gè)后綴。
本文的其余部分僅記錄了我如何實(shí)施John Doble在2012年發(fā)表的名為“使用Maven和JUnit類別進(jìn)行單元和集成測(cè)試”的建議 。 您可以在這里找到我的源代碼 。
創(chuàng)建JUnit類別
創(chuàng)建JUnit類別只是簡(jiǎn)單地創(chuàng)建一個(gè)空接口。 真的,就是這樣! 見下文:
package com.orangeandbronze.test;public interface IntegrationTest {}現(xiàn)在,我可以將此“標(biāo)記接口”作為類別應(yīng)用于我的集成測(cè)試–在下面的示例中,應(yīng)用于SectionDaoTest。
import org.junit.experimental.categories.Category; import com.orangeandbronze.test.IntegrationTest;@Category(IntegrationTest.class) public class SectionDaoTest extends DaoTest {... }添加Surefire和故障安全插件
現(xiàn)在添加Surefire和Failsafe插件。 我需要排除Surefire(運(yùn)行單元測(cè)試)中IntegrationTest標(biāo)記的所有測(cè)試,并在Failsafe(運(yùn)行集成測(cè)試)中包括IntegrationTest標(biāo)記的所有測(cè)試。 另外,我必須包含“ ** / *。java”,否則測(cè)試將無法運(yùn)行,我也不知道為什么。
<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>運(yùn)行測(cè)試
所以現(xiàn)在,當(dāng)我運(yùn)行mvn test時(shí),僅運(yùn)行單元測(cè)試,而當(dāng)我運(yùn)行mvn Integration-test或mvn verify (我通常運(yùn)行mvn verify)時(shí),不僅會(huì)運(yùn)行單元測(cè)試,還會(huì)打包我的項(xiàng)目,然后集成測(cè)試運(yùn)行。
在一個(gè)真實(shí)的項(xiàng)目中,每個(gè)開發(fā)人員只需幾次更改即可運(yùn)行所有的單元測(cè)試,一天要進(jìn)行數(shù)十次,而他的運(yùn)行頻率則要低一些,但每天至少一次。 CI服務(wù)器還將在其構(gòu)建期間運(yùn)行單元測(cè)試和集成測(cè)試。
翻譯自: https://www.javacodegeeks.com/2015/01/separating-integration-tests-from-unit-tests-using-maven-failsafe-junit-category.html
maven junit測(cè)試
總結(jié)
以上是生活随笔為你收集整理的maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科技昨夜今晨 0923:小米 14 系列
- 下一篇: jdk 8 集合对象排序_使用JDK 8