我有類似的問題,但沒有必要重構靜態,我相信有另一種解決方案。我在maven pom文件中這樣做了,但我會解釋發生了什麼。 Jacoco確實將數據注入到字節碼中。是的Powermock使用一個自定義的字節加載器和雅科克討厭。所以繼承人解決方案來解決它。
在您的Jacoco執行中,您需要Jacoco來爲您的測試使用默認檢測。 (你可以指定powermock測試或者只是包括所有測試它可以工作)。下面解釋什麼是默認的 - 儀表:Offline-instrumentation with Jacoco。
然後您必須具有測試的恢復步驟。現在繼承了有趣的部分,您必須運行正常的Jacoco Prepare Agent步驟,同時排除所有在默認儀器中運行的測試。 (如果你沒有,你會得到一堆的警告類似JaCoCo exceution數據已經存在XTEST)
這將解決你的問題,你並不需要重構你的靜態方法。雖然如果他們是不必要的,你應該仍然可以把它們取出;)
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<configuration>
<append>true</append>
</configuration>
<executions>
<execution>
<id>default-instrument</id>
<goals>
<goal>instrument</goal>
</goals>
<configuration>
<includes>
<include>**/*test*</include>
</includes>
</configuration>
</execution>
<execution>
<id>default-restore-instrumented-classes</id>
<goals>
<goal>restore-instrumented-classes</goal>
</goals>
<configuration>
<includes>
<include>**/*test*</include>
</includes>
</configuration>
</execution>
<execution>
<id>Prepare-Jacoco</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<excludes>
<exclude>**/*test*</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
我相信儀器需要在測試上完成,而不是在類上完成。至少在我的項目中,唯一需要測試的是我的測試類,而我的其他類不包括在內。試試這個,如果它不起作用,發佈你的pom/ant文件,這樣我可以再看一下它。 – Lencalot