我有以下脚本:
<?xml version="1.0" encoding="UTF-8"?>
<taskdef resource="emma_ant.properties">
<classpath>
<pathelement location="lib/emma.jar" />
<pathelement location="lib/emma_ant.jar" />
</classpath>
</taskdef>
<target name="compile">
<mkdir dir="build"/> <!-- vytvori adresar build -->
<mkdir dir="build/classes"/>
<mkdir dir="build/test"/>
<javac destdir="build/classes" srcdir="src" debug="true" /> <!-- prelozi zdrojove kody -->
<javac destdir="build/test" srcdir="test"> <!-- prelozi testy -->
<classpath> <!-- pro prelozeni testu je potreba junit a prelozena aplikace -->
<pathelement location="lib/junit-4.5.jar" />
<pathelement location="build/classes" />
</classpath>
</javac>
</target>
<target name="build" depends="compile">
<jar destfile="tetris.jar" basedir="build/classes"> <!-- zabali aplikaci do jaru -->
<manifest>
<attribute name="Main-Class" value="tetris.Main"/>
<attribute name="Class-Path" value="lib/mysql-connector-java-5.1.6-bin.jar lib/derbyclient.jar"/>
</manifest>
</jar>
</target>
<target name="jar" depends="build"></target>
<target name="run" depends="compile">
<java classname="tetris.Main" classpath="build/classes"> <!-- spusti aplikaci -->
<classpath>
<pathelement location="lib/mysql-connector-java-5.1.6-bin.jar" />
<pathelement location="lib/derbyclient.jar" />
</classpath>
</java>
</target>
<target name="instrument" depends="compile">
<mkdir dir="build/instrumented"/>
<emma verbosity="verbose"> <!-- vytvori tridy upravene pro sledovani coverage -->
<instr instrpath="build/classes"
destdir="build/instrumented"
metadatafile="build/metadata.emma"
merge="true" />
</emma>
</target>
<target name="test" depends="instrument">
<mkdir dir="reports" />
<mkdir dir="reports/junit" />
<junit printsummary="yes" haltonfailure="no" fork="true"> <!-- pusti JUnit testy -->
<classpath>
<pathelement location="build/test" />
<pathelement location="build/classes" />
<pathelement location="build/instrumented" />
<pathelement location="lib/junit-4.5.jar" />
<pathelement location="lib/emma.jar" />
<pathelement location="lib/emma_ant.jar" />
</classpath>
<formatter usefile="false" type="brief" />
<formatter type="plain"/>
<batchtest fork="yes" todir="reports/junit"> <!-- reporty budou v adresari reports/junit -->
<fileset dir="test">
<include name="**/TetrisSuite.java"/>
</fileset>
</batchtest>
<jvmarg value="-Demma.coverage.out.file=build/coverage.emma"/>
<jvmarg value="-Demma.coverage.out.merge=true" />
</junit>
<emma enabled="true" verbosity="verbose"> <!-- vygeneruje report emmy -->
<report sourcepath="src">
<fileset dir="build" includes="*.emma" />
<html outfile="reports/coverage.html" />
</report>
</emma>
</target>
<target name="clean">
<delete dir="build"/> <!-- smaze adresar build -->
<delete dir="reports"/>
<delete file="tetris.jar"/>
</target>
输出此消息:
processing input file [...NetBeansProjects/Tetris3/build/metadata.emma] ...
loaded 25 metadata entries
1 file(s) read and merged in 5 ms
nothing to do: no runtime coverage data found in any of the data files
有什么问题以及如何解决?
答案 0 :(得分:3)
看起来你正在接受非仪表化课程。
可能是因为classpath
任务中的junit
具有已检测(build/classes
)的已编译类(build/instrumented
)提前。也许在那个类路径中反转这些?
修改强>
我下载了emma并设置了一个包含一个源类和一个测试类的基本项目。我尝试使用问题中提供的构建来运行它。我做的唯一改变是将身体包裹在<project>
中,test
作为默认目标。在运行时,我在问题中得到了类似的信息:
[report] processing input file [/Users/mjc/stack_overflow/emma/build/metadata.emma] ...
[report] loaded 1 metadata entries
[report] 1 file(s) read and merged in 6 ms
[report] nothing to do: no runtime coverage data found in any of the data files
然后我设置了junit类路径,将检测的类放在vanilla之前:
<classpath>
<pathelement location="build/test" />
<pathelement location="build/instrumented" />
<pathelement location="build/classes" />
<pathelement location="lib/junit.jar" />
<pathelement location="lib/emma.jar" />
<pathelement location="lib/emma_ant.jar" />
</classpath>
并且重申:
[report] processing input file [/Users/mjc/stack_overflow/emma/build/coverage.emma] ...
[report] loaded 1 coverage data entries
[report] processing input file [/Users/mjc/stack_overflow/emma/build/metadata.emma] ...
[report] loaded 1 metadata entries
[report] 2 file(s) read and merged in 4 ms
[report] merged metadata contains 1 entries
[report] merged coverage data contains 1 entries
[report] writing [html] report to [/Users/mjc/stack_overflow/emma/reports/coverage.html] ...
[report] report: processing package [default package] ...
看起来像是为我修好了。我进行了一次测试:
[junit] Running SoTest
[junit] Testsuite: SoTest
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.081 sec
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.081 sec
[junit]
[junit] ------------- Standard Output ---------------
[junit] EMMA: collecting runtime coverage data ...
[junit] ------------- ---------------- ---------------
如果您在ant输出中没有看到任何类似的行,那么您可能没有符合**/TetrisSuite.java
模式的测试?