我有一個有點大的多模塊Maven項目。我在Jacoco處理的每個模塊中都有單元測試。我有一個單獨的子模塊做「合併」和「報告聚合」,這似乎是生成數據。我甚至在SonarQube中使用生成的數據。我的大多數測試都使用PowerMock,而我正在使用脫機工具。jacoco只顯示同一模塊中的類的覆蓋率
但是,在仔細觀察覆蓋率數據之後,我發現它正在遺漏覆蓋範圍數據,以瞭解我在測試期間執行的類和方法。我在每個模塊中看到的模式是,它只報告每個模塊中的單個類的覆蓋範圍,這是實際在當前模塊中的類。幾乎所有的測試都會調用構建中其他模塊中的其他類,並且這些類的覆蓋率從不報告。
以下插件配置在各子模塊使用的父POM:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.8</version>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>-Xmx1024m</argLine>
<includes>
<include>**/*Test.java</include>
</includes>
<systemPropertyVariables>
<jacoco-agent.destfile>${project.build.directory}/jacoco.exec</jacoco-agent.destfile>
<running-unit-test>true</running-unit-test>
</systemPropertyVariables>
</configuration>
</plugin>
當我檢查每個模塊生成的HTML結果,我發現,它僅報告在單一流的成果當前模塊,而不是其他模塊中類的數據。從這個角度來看,我會假設我如何在單獨的子模塊中進行「合併」和「報告聚合」可能與此問題無關。
生成的「jacoco.exec」文件是二進制文件,但我試圖從一個模塊中「捕捉」一個文件,以查看哪些ascii文本是可見的,並且只顯示了一個看起來像文件名的文件,它是該模塊的HTML覆蓋率報告中唯一報告的文件名。
我不確定我可以報告的其他信息。
更新:
我想我可以看到很清楚,現在當萬無一失運行單元測試,它採用了儀表類從目前的模塊,但樁的類都是從行家文物。這就是爲什麼我只看到當前模塊中的類的覆蓋率。
因此,看起來我需要一種方法來指定當前模塊所依賴的每個模塊的「target/generated-classes/jacoco」文件夾,該文件夾被保存到了surefire使用的類路徑中。我沒有辦法做到這一點。
或者,我看到「工具」目標有一個「包含」配置元素。我應該爲每個當前模塊所依賴的模塊指定所有「目標/類」目錄的路徑嗎?
我想我會用幾個中期戰略解決這個問題:1.雖然我們使用的是與離線儀器儀表PowerMock,接受模塊「foo」的單元測試將只顯示覆蓋該模塊,2.寫單元不被覆蓋類的其他模塊的測試,3.更換迫使PowerMock的用途使用一個工廠,然後更改這些測試使用和的Mockito在線儀表的一種機制。 –