0

这些是产生错误的步骤:

  1. 在 Eclipse (Cntrl-F11) 中运行我的单元测试。所有 67 人都成功并如此报告。
  2. 使用 Ant build.xml 文件,运行 Cobertura 任务以生成覆盖率报告。任务失败,说明单元测试失败。
  3. 当我再次尝试使用 Eclipse 运行单元测试时,我收到以下错误:

Unsupported major.minor version 51.0

(这些症状一直存在,直到我在 Eclipse 中使用 Project -> Clean。)

我的 Cobertura 蚂蚁任务是:

<target name="report-test" description="Generate a test coverage report." depends="clean, compile">
        <taskdef resource="tasks.properties">
            <classpath>
                <pathelement location="${lib.dir}/cobertura-1.9.4.1/cobertura.jar" />
                <pathelement location="${lib.dir}/cobertura-1.9.4.1/lib/asm-3.0.jar" />
                <pathelement location="${lib.dir}/cobertura-1.9.4.1/lib/asm-tree-3.0.jar" />
                <pathelement location="${lib.dir}/cobertura-1.9.4.1/lib/log4j-1.2.9.jar" />
                <pathelement location="${lib.dir}/cobertura-1.9.4.1/lib/jakarta-oro-2.0.8.jar" />
            </classpath>
        </taskdef>
        <cobertura-instrument todir="${build.dir}/cobertura-instrument">
            <fileset dir="${build.dir}">
                <include name="**/*.class"/>
            </fileset>
        </cobertura-instrument>
        <junit printsummary="yes" fork="true" haltonfailure="yes" showoutput="yes">
            <classpath location="${build.dir}/cobertura-instrument"/>
            <classpath location="${build.dir}"/>
            <classpath refid="classpath.test" />
            <sysproperty key="net.sourceforge.cobertura.datafile" file="cobertura.ser"/>
            <formatter type="xml" />
            <batchtest todir="doc/junit">
                <fileset dir="${test.dir}" />
            </batchtest>
        </junit>
        <cobertura-report srcdir="${src.dir}" destdir="doc/coverage" format="xml" />
        <delete file="cobertura.ser"/>
    </target>
4

1 回答 1

2

Coberatura 没有切换 Eclipse 的 Java 版本。

它实际上所做的是使用比您用于运行 Eclipse 的版本更新的 Java 版本重新编译类。Eclipse 无法加载那些 .class 文件。

短期解决方案是让 Eclipse 在运行 Coberatura 之后清理和重建项目……就像您目前所做的那样。

从长远来看,您应该将 Eclipse 更改为使用与 Ant 构建相同的 Java 版本运行,或者更改 Ant 构建文件,使其不会将“.class”文件写入 Eclipse 工作区。或者两者兼而有之……因为在 Eclipse 工作区中写入其他内容也会导致其他问题。

于 2013-01-22T23:47:08.090 回答