maven多模塊項目jacoco生成單元測試覆蓋率並輸出到sonar

一般單一模塊的工程,單元測試代碼和被測試代碼是在一起的,通過簡單配置利用jaccoco即可輸出測試結果到sonar中。

但是很多場景,單元測試代碼可能和被測試代碼不在同一個模塊中,這時候,會導致沒有測試代碼的模塊的測試覆蓋率始終是0。雖然另一個模塊的的測試代碼最終導致這個模塊的代碼也被執行了。

jacoco自身有報告合併功能,如果不使用sonar,通過簡單配置,也可以生成完整的測試覆蓋率。

如果使用sonar則要麻煩些,基本思路是,讓每個模塊跑單元測試,並將代碼執行情況彙總到一個jacoco.exec文件,而不是各自項目單獨的,這樣最終對於每個模塊,可以通過完整的jacoco.exec生成完整的測試覆蓋率。

父pom文件設置:

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<jacoco.version>0.8.4</jacoco.version>

	<!-- Sonar -->
	<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
	<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
	
	<!--將所有jacoco定位到同樣的父目錄位置-->
	<sonar.jacoco.reportPaths>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPaths>
	<sonar.language>java</sonar.language>

</properties>


<modules>
	<module>t1</module>
	<module>t2</module>
</modules>

<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${jacoco.version}</version>
				<configuration>
				 <!--使用前面定義的位置-->
					<destFile>${sonar.jacoco.reportPaths}</destFile>
					<!--重要!用追加的模式-->
					<append>true</append>
				</configuration>
			</plugin>
		</plugins>
	</pluginManagement>
</build>

最後使用maven命令行:
clean org.jacoco:jacoco-maven-plugin:prepare-agent install sonar:sonar

完整測試結果就會推送到sonar了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章