為了有用,自動測試應該運行得非常快。 否則,將不會在開發期間經常運行,甚至在開發人員工作站的默認配置中將被忽略。 最簡單的規則是僅編寫小型單元測試,該測試將模擬給定類的鄰居。 但是,有時在IoC容器上下文(Spring,CDI,Guice)或使用嵌入式數據庫(H2,HyperSQL,Derby)中測試某些東西很有用/必需。 不幸的是,即使是這種類型的測試,也可能顯著增加總體測試執行時間。 我在一個項目中遇到這種情況,并且為了避免使用skipTests標志,我使用了TestNG和Maven Surefire插件中的組開發了一種解決方案。
測試分為三組:
- 非常快速的真實單元測試(默認情況下全部為)–在開發過程中應經常運行(通過IDE或通過mvn測試,mvn軟件包)
- 集成速度較慢,但??自給自足的測試(設置Spring上下文和/或使用嵌入式H2數據庫)–至少應在提交/推送之前或在給定部件上運行時運行(通過IDE或通過mvn集成測試,mvn安裝)
- 真正的集成測試(要求訪問遠程服務器,例如測試Web服務或REST)應每天由CI服務器或從事集成工作的開發人員運行(mvn安裝,mvn集成測試并啟用其他配置文件)
為了實現給定的測試(或測試類),必須將其標記為“自集成”或“集成”(在方法或類級別):
@Test(groups = "self-integration")
public void shouldInitializeChainedAppInfoProperly() {
@Test(groups = "integration")
public class FancyWebServiceIntegrationTest {
Maven Surefire插件應配置為從默認執行中排除“自集成”和“集成”測試組,并在“集成測試階段”添加“自集成”:
<build><plugins>(...)<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${ver.surefire-plugin}</version><executions><execution><id>default-test</id> <!-- to override default configuration - in fact: unit tests --><configuration><excludedGroups>self-integration,integration</excludedGroups></configuration></execution><execution><id>self-integration</id><phase>integration-test</phase><goals><goal>test</goal></goals><configuration><groups>self-integration</groups><reportsDirectory>target/self-integration-surefire-reports/</reportsDirectory></configuration></execution></executions></plugin></plugins></build>
另外(如果需要),可以創建在“集成測試”階段配置的帶有“集成”測試組的單獨的單獨配置文件。
<profiles>(...)<profile><id>integration</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${ver.surefire-plugin}</version><executions><execution><id>integration</id><phase>integration-test</phase><goals><goal>test</goal></goals><configuration><groups>integration</groups><reportsDirectory>target/integration-surefire-reports/</reportsDirectory></configuration></execution></executions></plugin></plugins></build></profile></profiles>
可以在AppInfo的人工分支(pom.xml和示例測試類)中找到工作示例。 根據您的需求很容易采用它。
三個測試組都有各自獨立的報告格式,以免彼此覆蓋。 作為擴展,可能可以將它們合并到一個匯總的測試報告中。
參考: 跑得快單元測試的時候,慢整合很少- TestNG的和Maven配置指南從我們JCG伙伴馬爾欽Zajaczkowski在固態軟博客。
翻譯自: https://www.javacodegeeks.com/2012/04/testng-and-maven-configuration-guide.html