cobertura 1.9.2 的代码覆盖率为零,但测试正常

发布于 2024-08-19 12:51:05 字数 3157 浏览 11 评论 0原文

我运行代码覆盖率目标:

<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>

然后我得到以下输出(当使用 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.

我正在使用 Ant 1.7.0 和 cobertura 1.9.2。

有什么想法为什么没有覆盖吗?测试运行正常,正如我在目标中看到的那样。 我尝试切换java版本(1.5.0_06和1.6.0_10)但没有区别。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨离汐 2024-08-26 12:51:05

我发现成功设置环境属性 cobertura.use.java.nio=false

由于我使用的是 ant,因此我只是通过将以下内容添加到 命令来编辑 cobertura-build.xml 文件:

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

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>
往昔成烟 2024-08-26 12:51:05

你的 cobertura 在构建过程中崩溃了。

您可以尝试将 Cobertura 升级到版本 1.9.3 或 1.9.4.1。不过,我在使用 1.9.4.1 时遇到了一些问题,目前我正在使用 1.9.3。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文