2015-02-09 45 views
0

我有一個包含一堆OSGI包的webapp。需要在部署的工件上運行自動化測試時生成cobertura代碼覆蓋率報告。 爲此,我使用cobertura提供了可部署的工件here 執行了所有必需的設置,並能夠生成工具類和相應的可部署工件「.war」。併成功地將它部署在野蠅中。 但是,在訪問應用程序並執行少量捕獲覆蓋操作之後,試圖停止服務器(jboss關閉掛鉤會調用所需的cobertura類並生成用於創建覆蓋率報告的cobertura.ser文件),並且此結果在以下例外嘗試調用cobertura儀器化類中的方法時拋出NoSuchMethodException

2015-02-09 17:46:06,420 SEVERE [net.sourceforge.cobertura.coveragedata.TouchCollector] (Thread-84) Cannot apply touches: java.lang.NoSuchMethodException: com.sample.package.SomeInstrumentedClass.__cobertura_classmap(net.sourceforge.cobertura.coveragedata.LightClassmapListener) 
at java.lang.Class.getDeclaredMethod(Class.java:1994) [rt.jar:1.7.0_25] 
at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesToSingleClassOnProjectData(TouchCollector.java:125) [admin-rest-api-1.0.0.jar:1.0.0] 
at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:107) [admin-rest-api-1.0.0.jar:1.0.0] 
at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:270) [admin-rest-api-1.0.0.jar:1.0.0] 
at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:32) [admin-rest-api-1.0.0.jar:1.0.0] 
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25] 

,拋出此異常的所有類的Cobertura試圖訪問。當我解壓展開的工件時,我可以看到所有的類都裝備了cobertura特定的代碼,並且所有工具類中都有具體的方法__cobertura_classmap。無法確定爲什麼NoSuchMethodException被拋出,儘管實際存在於已部署的工件中。

我使用的Cobertura-2.0.3,的Cobertura,Maven的插件-2.6和Java版本1.7.0_71和Apache菲利克斯

有沒有人遇到這個問題? OSGI與這種行爲有什麼關係?

+0

如果您可以將您的示例上傳到某個地方,那可能會有很大幫助。根據這些信息,很難發現,您如何使用Felix來處理您的環境。 – 2015-02-10 12:52:55

回答

0

我與Cobertura 2.1.1,Java 1.8.0_72 & Java 1.7.0_79有相同的問題,其中插裝的類確實包含它所抱怨的方法。

我在我的項目中解決了Cobertura問題,它將我的內部類(將Cobertura抱怨的類)從我的單元測試類中移動到它自己的類文件中。

我還必須將我的一個變量從有問題的類中移出來,作爲一個獨立的類。變量曾經是Gson TypeToken:

com.google.gson.reflect.TypeToken GSON_TYPE_TOKEN = new TypeToken<MyJsonStructure>(){}; 

所以我的建議是嘗試和避免內部類。

相關問題