Cobertura与Ant Script Junit测试用例失败

时间:2016-09-17 14:33:48

标签: junit ant code-coverage cobertura

我有以下if(!any(dplyr::between(A,7.8,8.2))) A <- c(A,8.01) if(!any(dplyr::between(B,7.8,8.2))) B <- c(B,8.01)

build.xml

但是,当我运行构建时,我的覆盖率为0%。

直到 <?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> 目标,我相信一切都很好。但是当构建运行instrument目标时,测试失败。不知道为什么会这样。如果我在Test之外运行测试,那么它就会成功。

有什么建议我可以解决这个问题?

运行ant目标

时出现以下错误
test

1 个答案:

答案 0 :(得分:0)

最后我找到了一个解决方案(不回答)

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

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

如果有人解释我为什么会这样,我会非常感激。

如果我再次使用Junit-4.11.jar失败。报告中的Junit错误显示error message="org/hamcrest/SelfDescribing" type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing