Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Ant脚本的Cobertura Junit测试用例失败_Junit_Ant_Code Coverage_Cobertura - Fatal编程技术网

带有Ant脚本的Cobertura Junit测试用例失败

带有Ant脚本的Cobertura Junit测试用例失败,junit,ant,code-coverage,cobertura,Junit,Ant,Code Coverage,Cobertura,我得到了下面的build.xml <?xml version="1.0" encoding="UTF-8"? <project name="Sample" default="coverage" basedir="."> <property file="build.properties" /> <path id="cobertura.classpath"> <fileset dir="lib">

我得到了下面的
build.xml

  <?xml version="1.0" encoding="UTF-8"?
<project name="Sample" default="coverage" basedir=".">

    <property file="build.properties" />

    <path id="cobertura.classpath">
        <fileset dir="lib">
            <include name="**/*.jar" />
        </fileset>
    </path>

    <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>

    <target name="init">
        <mkdir dir="${classes.dir}" />
        <mkdir dir="${instrumented.dir}" />
        <mkdir dir="${reports.xml.dir}" />
        <mkdir dir="${reports.html.dir}" />
        <mkdir dir="${coverage.xml.dir}" />
        <mkdir dir="${coverage.summaryxml.dir}" />
        <mkdir dir="${coverage.html.dir}" />
    </target>

    <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="yes" includeantruntime="false">
            <classpath refid="cobertura.classpath" />
        </javac>

    </target>

    <target name="instrument" depends="init,compile">
            <!--
       Remove the coverage data file and any old instrumentation.
      -->
            <delete file="cobertura.ser" />
            <delete dir="${instrumented.dir}" />
            <!--
       Instrument the application classes, writing the
       instrumented classes into ${build.instrumented.dir}.
      -->
            <cobertura-instrument todir="${instrumented.dir}" datafile="cobertura.ser">
                <!--
        The following line causes instrument to ignore any
        source line containing a reference to log4j, for the
        purposes of coverage reporting.
       -->
                <ignore regex="org.apache.log4j.*" />
                <fileset dir="${classes.dir}">
                    <!--
         Instrument all the application classes, but
         don't instrument the test classes.
        -->
                    <include name="**/*.class" />
                    <exclude name="**/*Test.class" />
                </fileset>
            </cobertura-instrument>
        </target>

    <target name="test" depends="init,compile">
        <echo>${basedir}\cobertura.ser</echo>
        <junit fork="yes" dir="test" showoutput="yes" printsummary="yes" reloading="false">

             <sysproperty key="net.sourceforge.cobertura.datafile"
                    file="${basedir}\cobertura.ser" />
            <!--
                    Note the classpath order: instrumented classes are before the
                    original (uninstrumented) classes.  This is important.
            -->
            <classpath location="${instrumented.dir}" />
            <classpath location="${classes.dir}" />

            <!--
                    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 todir="${reports.xml.dir}" unless="testcase">
                <fileset dir="test">
                    <include name="**/*Test.java" />
                </fileset>
            </batchtest>
        </junit>

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

    </target>

    <target name="coverage-check">
        <cobertura-check branchrate="34" totallinerate="100" />
    </target>

    <target name="coverage-report">
        <!--
                Generate an XML file containing the coverage data using
                the "srcdir" attribute.
        -->
        <cobertura-report srcdir="${src.dir}" destdir="${coverage.xml.dir}" format="xml" />
    </target>

    <target name="summary-coverage-report">
        <!--
                Generate an summary XML file containing the coverage data using
                the "srcdir" attribute.
        -->
        <cobertura-report srcdir="${src.dir}" destdir="${coverage.summaryxml.dir}" format="summaryXml" />
    </target>

    <target name="alternate-coverage-report">
        <!--
                Generate a series of HTML files containing the coverage
                data in a user-readable form using nested source filesets.
        -->
        <cobertura-report destdir="${coverage.html.dir}">
            <fileset dir="${src.dir}">
                <include name="**/*.java"/>
            </fileset>
        </cobertura-report>
    </target>

    <target name="clean" description="Remove all files created by the build/test process.">
        <delete dir="${classes.dir}" />
        <delete dir="${instrumented.dir}" />
        <delete dir="${reports.dir}" />
        <delete file="cobertura.log" />
        <delete file="cobertura.ser" />
    </target>

    <target name="coverage" depends="compile,instrument,test,coverage-report,summary-coverage-report,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports."/>
</project>

最后我找到了解决办法(不是答案)

在跟踪Junit报告之后,我发现它与Junit依赖性有关

我刚刚从构建路径中删除了Junit-4库,并将Junit-4.7.jar添加到构建路径中,您知道它的工作原理

如果有人向我解释为什么会发生这种情况,我将非常感激


如果我再次使用Junit-4.11.jar,同样会失败。报告中的Junit错误是
error message=“org/hamcrest/selfdescription”type=“java.lang.NoClassDefFoundError”>java.lang.NoClassDefFoundError:org/hamcrest/selfdescription

,只是为了确保:您没有使用PowerMock?这有时会扼杀你的覆盖率统计数据。我没有使用过
PowerMock
。我还想知道为什么我的测试用例会失败。我相信如果我的测试用例在构建中没有问题地执行,那么覆盖率也可能出现在报告中。
test:
    [junit] Running org.jtaddeus.playground.LogicTest
    [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.141 sec
    [junit] Test org.jtaddeus.playground.LogicTest FAILED
    [junit] Running org.jtaddeus.playground.ValidatorTest
    [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.14 sec
    [junit] Test org.jtaddeus.playground.ValidatorTest FAILED