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
連結
- SonarQube的部落格文章SonarQube中的單元測試執行
- Jacoco Maven插件項目站點
- Maven建構生命周期簡介
- Maven故障安全插件項目站點
- 建構助手Maven插件項目站點
- SonarQube文檔,有關Java Projec內建測試的代碼覆寫率
- GitHub上的示例Maven項目
翻譯自: https://www.javacodegeeks.com/2015/05/unit-and-integration-test-reports-for-maven-projects-in-sonarqube.html
maven