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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/3 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。