當我使用Jacoco代理運行單元測試時,我的本地Jacoco報告與SonarQube上的覆蓋範圍之間存在一些差異。這似乎隻影響包含嵌套類的文件。本地生成的報告具有外部類和所有內部類的覆蓋率信息,但SonarQube上的覆蓋率數據僅包含內部類。SonarQube覆蓋缺失Jacoco報告涵蓋的一些行
例如,Foo.java包含外部類Foo和內部類Bar和Baz。
我的本地報告顯示,Foo類的指令覆蓋率爲26%,Foo.Bar類的指令覆蓋率爲46%,Foo.Baz類的指令覆蓋率爲0% Foo.java的整體指令覆蓋率爲30%。 SonarQube覆蓋頁面爲Foo.java提供15%的線覆蓋率。我知道線路覆蓋不等於指令覆蓋,但我希望這些數字更接近。經過進一步檢查,我注意到在SonarQube上Foo.java的基於文件的覆蓋範圍視圖中,外部類Foo中的所有行標記爲「未被單元測試覆蓋」,並且唯一被覆蓋的行是Foo中的行這是我的預期。這一差異彌補了Jacoco報告與SonarQube之間的差距約15%。我在本地掃描程序日誌或服務器分析日誌中看不到任何例外。
我在JaCoCo 0.7.7.201606060606,Java版本1.8.0_73和sonar-scanner 2.8本地運行。服務器運行Java版本1.8.0_66-b17,SonarQube版本5.6.3和SonarQube Java插件版本4.2.1.6971。
我希望有任何建議,並會很樂意提供更多的細節,如果這將有所幫助。
感謝您的指點和反饋!我知道線路和指令覆蓋率預計會有所不同。更大的擔憂是SonarQube和JaCoCo對Foo.java的覆蓋範圍有所不同。事實證明,他們使用不同的類文件來執行分析,正如我在答案中所解釋的那樣。抱歉打擾你! –