Zero code coverage with cobertura 1.9.2 but tests are working
I run the code coverage target:
<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>
Then I get the following output ( when using fork="true"):
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.
I am using Ant 1.7.0 and cobertura 1.9.2.
Any ideas why there is no coverage? Test run ok as I see in my target. I have tried to switch java versions ( 1.5.0_06 and 1.6.0_10) but no difference.
I found success in setting the environment property cobertura.use.java.nio=false
.
Since I was using ant, I just edited the cobertura-build.xml
file by adding the following to the <junit>
command:
<junit fork="yes">
<jvmarg value="-Dcobertura.use.java.nio=false"/>
...
</junit>
Your cobertura is crashing middle of build.
You could try to upgrade Cobertura to version 1.9.3 or 1.9.4.1. I had some problems with 1.9.4.1, though, and I am currently using 1.9.3.
精彩评论