[英]Unit tests coverage using Jacoco for test classes written using Powermock
[英]Unit test coverage on java.lang classes with JaCoCo
我正在嘗試使用 JaCoCo 對java.lang
類進行單元測試覆蓋率。
背景:到目前為止有效
這不是真正的標准,但是將${sourceDirectory}
中OpenJDK-8-sources
(在 Ubuntu 上)中提供的源和 rt.jar 中提供的類復制到${project.build.outputDirectory}
中非常簡單${project.build.outputDirectory}
,然后 JaCoCo maven 插件可以看到它們並為某些類生成合適的 output。
例如,我對sun.reflect.ByteVectorFactory
的來源進行了一些報道。
但我無法覆蓋java.lang
中的課程。 調用Byte.toString()
時,報告中未涵蓋 function 並且Byte.class
未顯示在classDumpDir
生成的數據中。
我查看了 JaCoCo 的來源,看看java.lang
是否被明確忽略,到目前為止我沒有發現任何明顯的東西,但我對 JaCoCo 源代碼一點也不熟悉。
實際問題
可以做些什么來解決這個限制? 我正在考慮以下幾種可能性:
java.lang
中是硬編碼的,因為它是系統 package 名稱,但這可以更改
編輯
我似乎並不是唯一一個嘗試做這種事情的人。
郵件列表線程:https://groups.google.com/g/jacoco/c/_tuoA7DHA7E/m/BQj53OvXoUsJ
GitHub 上的拉取請求: https://github.com/jacoco/jacoco/pull/49
在這中間的某個地方,有人提到
尤其是代理本身使用的 JDK 類可能無法被跟蹤。
所以它可以解釋為什么有些類沒有被檢測。
我做了更多的測試,我看到了
因此,似乎無法以這種方式檢測代理加載時已經加載的類。
我提取了rt.jar
中的所有類,並使用離線檢測對其進行檢測,然后將rt.jar
替換為其檢測版本,並將 JaCoCo 代理包含在引導程序 ZA2F2ED4F8EBC2CBB14C21A29DC40 路徑中(使用 -XbootclassAB 路徑)
這樣做,我得到以下無限遞歸:
...
at java.lang.System.getProperties(System.java)
at org.jacoco.agent.rt.internal_f3994fa.Offline.getRuntimeData(Offline.java:36)
at org.jacoco.agent.rt.internal_f3994fa.Offline.getProbes(Offline.java:60)
at java.lang.System.$jacocoInit(System.java)
at java.lang.System.getProperties(System.java)
at org.jacoco.agent.rt.internal_f3994fa.Offline.getRuntimeData(Offline.java:36)
應該可以捕獲遞歸以防止這種情況發生,但這顯然需要對 JaCoCo 源代碼進行一些修改,因此目前無法檢測這些類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.