Zero code coverage with cobertura 1.9.2 but tests are working
Asked Answered
F

2

3

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.

Foxtrot answered 27/1, 2010 at 17:16 Comment(0)
E
5

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>
Elzaelzevir answered 13/7, 2011 at 21:3 Comment(1)
Setting cobertura.use.java.nio=false also solved this problem for me.Purtenance
D
0

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.

Delacroix answered 4/5, 2010 at 19:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.