2010-01-27 73 views
3

我運行的代碼覆蓋率目標:零代碼覆蓋率的Cobertura 1.9.2,但測試工作

<junit fork="yes" dir="${basedir}" failureProperty="test.failed"> 
     <!-- 
         Note the classpath order: instrumented classes are before the 
         original (uninstrumented) classes. This is important. 
       --> 
     <classpath path="${instrumented.dir}" /> 
     <classpath path="${classes.dir}" /> 
     <classpath refid="classpath" /> 
     <!-- 
         The instrumented classes reference classes used by the 
         Cobertura runtime, so Cobertura and its dependencies 
         must be on your classpath. 
       --> 
     <classpath refid="cobertura.classpath" /> 

     <formatter type="xml" /> 
     <!--<test name="${testcase}" todir="${reports.xml.dir}" if="testcase" />--> 
     <batchtest fork="yes" todir="${reports.xml.dir}"> 
       <fileset dir="${classes.dir}"> 
         <include name="**/generated/AllTests.class" /> 
       </fileset> 
     </batchtest> 
</junit> 

<junitreport todir="${reports.xml.dir}"> 
     <fileset dir="${reports.xml.dir}"> 
       <include name="TEST-*.xml" /> 
     </fileset> 
     <report format="frames" todir="${reports.html.dir}" /> 
</junitreport> 

然後我得到下面的輸出(當使用叉=「真」):

java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:585) 
     at net.sourceforge.cobertura.util.FileLocker.lock(FileLocker.java:124) 
     at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:331) 
     at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:31) 
     at java.lang.Thread.run(Thread.java:595) 
Caused by: java.io.IOException: No locks available 
     at sun.nio.ch.FileChannelImpl.lock0(Native Method) 
     at sun.nio.ch.FileChannelImpl.lock(FileChannelImpl.java:784) 
     at java.nio.channels.FileChannel.lock(FileChannel.java:865) 
     ... 8 more 
--------------------------------------- 
Unable to get lock on /vobs/rnc/rrt/roam2/roamSs/RoamMao_swb/RoamMao_bldu/ant_build/cobertura.ser.lock: null 
This is known to happen on Linux kernel 2.6.20. 
Make sure cobertura.jar is in the root classpath of the jvm 
process running the instrumented code. If the instrumented code 
is running in a web server, this means cobertura.jar should be in 
the web server's lib directory. 
Don't put multiple copies of cobertura.jar in different WEB-INF/lib directories. 
Only one classloader should load cobertura. It should be the root classloader. 

我使用Ant 1.7.0和cobertura 1.9.2。

任何想法爲什麼沒有覆蓋?測試運行正常,因爲我在我的目標中看到。 我試圖切換Java版本(1.5.0_06和1.6.0_10),但沒有區別。

回答

0

你的cobertura正在崩潰的建設中。

您可以嘗試將Cobertura升級到版本1.9.3或1.9.4.1。不過,我在1.9.4.1上遇到了一些問題,而我目前正在使用1.9.3。

5

我發現成功設置環境屬性cobertura.use.java.nio=false

因爲我是用螞蟻,我只是通過添加以下到<junit>命令編輯cobertura-build.xml文件:

<junit fork="yes"> 
    <jvmarg value="-Dcobertura.use.java.nio=false"/> 
    ... 
</junit> 
+0

設置cobertura.use.java.nio = FALSE也解決了這個問題對我來說。 – 2011-08-01 10:06:42