使用Junit的EMMA,我应该使用检测类或java类进行测试吗?

时间:2012-08-29 05:30:50

标签: java ant junit emma

我已经通过这个tutorial获取了我的ANT Script for emma / junit,它声明了

  

<classpath>的{​​{1}}元素中,更改实际类的位置,以便指向$ {instr.dir}属性而不是普通的目标/类文件夹。< / p>

以下是我的针对Apache Ant的build.xml的emma部分(pastebin链接到完整的build.xml)

<junit>

<!-- =================================================================== --> <!-- Run the tests with EMMA * depends from compile --> <!-- =================================================================== --> <target name="emmatest" depends="compile" description="Tests the project with Emma Query" > <!-- ======================================================================= --> <!-- EMMA INSTRUMENTATION --> <!-- ======================================================================= --> <emma enabled="${emma.enabled}" > <instr instrpathref="emma.coverage.classes" destdir="${instr.dir}" metadatafile="${coverage.dir}/metadata.emma" merge="true" > <filter value="${emma.filter}" /> </instr> </emma> <junit fork="true" forkmode="once" > <test name="test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest" todir="${coverage.dir}"> <formatter type="xml"/> </test> <classpath> <path refid="emma.lib" /> <pathelement location="${instr.dir}"/> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </classpath> <jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.emma" /> <jvmarg value="-Demma.coverage.out.merge=false" /> </junit> </target> 的构建部分结果: JUNIT失败结果,指向emma

${instr.dir}

emmatest: [instr] processing instrumentation path ... [instr] instrumentation path processed in 109 ms [instr] [6 class(es) instrumented, 0 resource(s) copied] [instr] metadata merged into [C:\Users\Michael\workspace\log4jassignment.s06005586\build\emma-reports\metadata.emma] {in 42 ms} [junit] Test test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest FAILED 的构建部分结果: JUNIT通过结果,指向junitreport

real classes ${build.classes}

我想知道为什么我的JUNIT测试test: [junit] Running test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest [junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.504 sec [junit] Running test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest [junit] Tests run: 6, Failures: 0, Errors: 0, Time elapsed: 0.526 sec 与emma失败但是传递了junit。我也很自信我的AppenderLayoutTest没有被创建,因为coverage file的JUNIT失败了。

我是否使用错误的类测试?或者我错过了什么?

更新:2012年8月28日下午6:21

然后我改变了

AppenderLayoutTest

<test 
name="test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest"
todir="${coverage.dir}">

<batchtest> <fileset dir="${instr.dir}" includes="**/*Test.class" /> </batchtest> 更新后的构建部分结果: JUNIT失败结果,指向emma 其中..

${instr.dir}

更新:下午7:02

我添加了emmatest: [instr] processing instrumentation path ... [instr] instrumentation path processed in 105 ms [instr] [6 class(es) instrumented, 0 resource(s) copied] [instr] metadata merged into [C:\Users\Michael\workspace\log4jassignment.s06005586\build\emma-reports\metadata.emma] {in 89 ms} [junit] TEST test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest FAILED [junit] TEST test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest FAILED [junit] Tests FAILED ,这是输出

<formatter type="plain" usefile="false" />

什么是emmatest: [instr] [EMMA v2.1, build 5320 (stable) (2005/06/20 22:08:27)] [instr] instrumentation path: [instr] { [instr] C:\Users\Michael\workspace\log4jassignment.s06005586\build\classes [instr] } [instr] instrumentation output mode: copy [instr] metadata output file: C:\Users\Michael\workspace\log4jassignment.s06005586\build\emma-reports\metadata.emma [instr] metadata output merge mode: true [instr] processing dir path entry [C:\Users\Michael\workspace\log4jassignment.s06005586\build\classes] ... [instr] instrumentation path processed in 147 ms [instr] [6 class(es) instrumented, 0 resource(s) copied] [instr] metadata contains 6 entries [instr] metadata merged into [C:\Users\Michael\workspace\log4jassignment.s06005586\build\emma-reports\metadata.emma] {in 49 ms} [junit] Running test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest [junit] Testsuite: test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec [junit] Caused an ERROR [junit] Illegal local variable table length 17 in method test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest.<init>()V [junit] java.lang.ClassFormatError: Illegal local variable table length 17 in method test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest.<init>()V [junit] at java.lang.Class.forName0(Native Method) [junit] at java.lang.Class.forName(Unknown Source) [junit] TEST test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest FAILED [junit] Running test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest [junit] Testsuite: test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec [junit] Caused an ERROR [junit] Expecting a stackmap frame at branch target 11 in method test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest.<init>()V at offset 4 [junit] java.lang.VerifyError: Expecting a stackmap frame at branch target 11 in method test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest.<init>()V at offset 4 [junit] at java.lang.Class.forName0(Native Method) [junit] at java.lang.Class.forName(Unknown Source) [junit] TEST test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.StressTest FAILED [junit] Tests FAILED

2 个答案:

答案 0 :(得分:1)

您可以尝试更换

吗?
<test 
name="test.nz.ac.massey.cs.sdc.log4jassignment.s06005586.AppenderLayoutTest"
todir="${coverage.dir}">

<batchtest>
    <fileset dir="${instr.dir}" includes="**/*Test.class" />
</batchtest>

最后,我会要求您在测试中加入一些sysout,看看测试中出了什么问题。这可能与我觉得的配置有关。

答案 1 :(得分:1)

查看您分享的最新跟踪似乎可以使用

-XX:-UseSplitVerifier

作为VM参数来摆脱与JDK7相关的错误。

Check this out