SonarQube中的Maven项目的单元和集成测试报告
自SonarQube 4.2起。 測試報告不是在Maven構建期間由Sonar Maven插件生成的(請參閱SonarQube的博客文章 )。 因此,在Sonar Maven插件收集SonarQube服務器的信息之前,必須由另一個插件生成測試報告。 在這里,Jacoco Maven插件可以提供幫助。 它有可能生成SonarQube可以理解的測試報告。 Jacoco Maven插件更進一步,它有可能生成用于集成測試的測試報告。
在以下各節中,提出了滿足以下條件的解決方案:
- Maven被用作構建工具。
- 該項目可以是多模塊項目。
- 單元測試和集成測試是每個模塊的一部分。 這里,集成測試是測試模塊中類之間的集成的測試。
- 測試報告在單元測試報告和集成測試報告中是分開的。
下一部分的路線圖是,首先顯示了Maven項目結構,用于單元測試和集成測試的分離。 然后顯示了Maven項目配置,其中包含單獨的單元測試運行和集成測試運行。 之后,我們來看看Maven項目配置,以生成在單元測試和集成測試中分開的測試報告。 最后,SonarQube的儀表板中顯示了SonarQube的配置,用于測試報告的可視化。
Maven項目結構
首先,我們看一下單個模塊項目的默認Maven項目結構。
my-app ├── pom.xml ├── src │?? ├── main │?? │?? └── java │?? │?????? └── │?? └── test │?????? └── java │?????????? └──目錄src / main / java包含生產源代碼,目錄src / test / java包含測試源代碼。 我們可以將單元測試和集成測試放到這個目錄中。 但是我們想將這兩種類型的測試放在單獨的目錄中。 因此,我們添加了一個名為src / it / java的新目錄。 然后將單元測試放在src / test / java目錄中,并將集成測試放在src / it / java目錄中,因此新的項目結構如下圖所示。
my-app ├── pom.xml ├── src │?? ├── it │?? │?? └── java │?? │?????? └── │?? ├── main │?? │?? └── java │?? │?????? └── │?? └── test │?????? └── java │?????????? └──單元和集成測試運行
幸運的是,單元測試運行配置是Maven默認項目配置的一部分。 如果滿足以下條件,Maven將自動運行這些測試:
- 測試位于目錄src / test / java和
- 測試類名稱以Test開頭或以Test或TestCase結尾。
Maven在Maven的構建生命周期階段測試期間運行這些測試。
集成測試運行配置必須手動完成。 它存在可以提供幫助的Maven插件。 我們希望滿足以下條件:
- 集成測試存儲在目錄src / it / java和
- 集成測試類名稱要么以IT開頭,要么以IT或ITCase結尾 ,
- 集成測試在Maven的構建生命周期階段進行集成測試。
首先,Maven必須知道它必須在其測試類路徑中包含目錄src / it / java 。 在這里,Build Helper Maven插件可以提供幫助。 它將目錄src / it / java添加到測試類路徑。
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>build-helper-maven-plugin</artifactId><version>1.8</version><executions><execution><id>add-test-source</id><phase>process-test-sources</phase><goals><goal>add-test-source</goal></goals><configuration><sources>src/it/java</sources></configuration></execution><execution><id>add-test-resources</id><phase>generate-test-resources</phase><goals><goal>add-test-resource</goal></goals><configuration><resources><resource>src/it/resources</resource></resources></configuration></execution></executions></plugin>上面的代碼段必須插入到項目根pom中的<project> <build> <plugins>部分 。
Maven的構建生命周期包含一個稱為集成測試的階段。 在此階段,我們要運行集成測試。 因此,我們將Maven故障安全插件綁定到階段集成測試:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-failsafe-plugin</artifactId><version>2.13</version><configuration><encoding>${project.build.sourceEncoding}</encoding></configuration><executions><execution><id>failsafe-integration-tests</id><phase>integration-test</phase><goals><goal>integration-test</goal><goal>verify</goal></goals></execution></executions> </plugin> 同樣,以上代碼片段也必須插入到項目根pom中的<project> <build> <plugins>部分 。 然后,當Maven故障保護插件的類名稱以IT開頭或以IT或ITCase結尾時,它們會自動運行集成測試。
測試報告生成
我們想使用Jacoco Maven插件生成測試報告。 它應該生成兩個測試報告,一個用于單元測試,一個用于集成測試。 因此,該插件必須要準備兩個單獨的代理。 然后他們在測試運行期間生成報告。 Maven的構建生命周期包含自己的階段,可以在測試階段之前進行準備( 測試和集成測試 )。 測試階段的準備階段稱為過程測試類 , 集成測試階段的準備階段稱為集成前測試。 在這兩個階段中,我們綁定了Jacoco Maven插件,因此此插件的配置類似于以下代碼片段(同樣,它是<project> <build> <plugins>一節的一部分):
<plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.7.2.201409121644</version><executions><execution><configuration><destFile>${sonar.jacoco.reportPath}</configuration><id>pre-test</id><phase>process-test-classes</phase><goals><goal>prepare-agent</goal></goals></execution> <!-- we want to execute <span class="hiddenSpellError" pre="execute " data-mce-bogus="1">jacoco</span>:prepare-agent-integration in test phase,--> but before executing maven failsafe plugin --><execution><configuration><destFile>${sonar.jacoco.itReportPath}</destFile></configuration><id>pre-itest</id><phase>pre-integration-test</phase><goals><goal>prepare-agent-integration</goal></goals></execution></executions> </plugin>配置元素destFile是應將測試報告存儲到的位置的路徑。 使用屬性$ { sonar.jacoco.reportPath}和$ { sonar是很重要的。 jacoco.itReportPath}。 SonarQube使用這些屬性來查找可視化的測試報告。
現在,我們可以運行目標mvn install,并且我們的項目已構建為包含單元和集成測試,并生成兩個測試報告。
SonarQube測試報告可視化
現在,我們想在SonarQube中可視化我們的測試報告。 因此,在成功構建之后,我們必須在我們的項目中運行Sonar Maven 3插件(命令mvn sonar:sonar )。
在SonarQube儀表板中打開項目時,我們僅看到每個模塊的單元測試的報告。 原因是必須在SonarQube中分別配置集成測試的報告可視化。 SonarQube文檔中很好地描述了這些配置步驟。
摘要
該博客描述了如何在Maven構建期間為單元測試和集成測試生成測試報告。 在GitHub上 ,我托管了一個示例項目,演示了所有配置步驟。 作為技術環境,我使用
- Maven的3.2.5
- Maven插件:
- Maven Surefire插件
- SonarQube 4.5.1
- Java 7
鏈接
翻譯自: https://www.javacodegeeks.com/2015/05/unit-and-integration-test-reports-for-maven-projects-in-sonarqube.html
總結
以上是生活随笔為你收集整理的SonarQube中的Maven项目的单元和集成测试报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7999 元,今晚 18:08 开售:华
- 下一篇: hadoop简单介绍_Hadoop:简单