如何在Ant构建中运行jacoco时查找junit类中的错误

问题描述 投票:0回答:1

我在我的Ant构建中使用Jacoco代码覆盖率,并且在对junit类使用工具后构建成功,因为它们中包含powermockito。当我通过蚂蚁并且测试失败构建成功时,在junit类中出现错误。我正在使用来自另一个build.xml的WAS服务器jar来编译src和测试类,并将这些类文件放置在dir.build文件夹中。该文件夹作为仪器任务的输入提供,以给我仪器类。启动junit任务时,是说测试类中发生了错误,并且测试失败。我使用了printsummary ="on",并尝试使用详细信息生成日志。我想知道运行junit时发生了什么错误。有人可以告诉我如何查看Test类中的错误。

<?xml version="1.0" encoding="UTF-8"?>
<project name = "JunitIntegration" default = "report" xmlns:jacoco="antlib:org.jacoco.ant">

    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
        <classpath path="./ant/lib/jacocoant.jar"/>
    </taskdef>


    <property name= "project.name" value = "Services"/>
    <property name= "source.dir" value = "C:\\Thejesh\\Workspaces\\firstSetup\\Services"/>
    <property name= "dir.build" value = "C:\\Thejesh\\Workspaces\\edpm_firstSetup\\build\\Services-classes"/>

    <!-- Code coverage report -->
    <property name= "result.dir" value = "C:\\Thejesh\\Workspaces\\edpm_firstSetup\\junitResults"/>
    <property name= "result.classes.instr.dir" value = "${result.dir}/classes-instr"/>
    <property name= "result.report.dir" value = "${result.dir}/site/jacoco"/>
    <property name= "result.exec.file" value = "${result.dir}/jacoco.exec"/>

    <import file="build-utils.xml"/>    

    <target name ="cleanL">
        <delete dir ="${result.dir}"/>
    </target>

    <target name ="createL">
        <mkdir dir ="${result.dir}"/>
        <mkdir dir ="${result.classes.instr.dir}"/>
    </target>



    <target name ="instrument" depends = "cleanL, createL">
        <jacoco:instrument destdir="${result.classes.instr.dir}">
            <fileset dir="${dir.build}"/>
        </jacoco:instrument>
    </target>


    <target name ="test" depends = "instrument">
        <record name="${result.dir}/loggerinfo.log" loglevel="verbose" action="start"/>
        <jacoco:coverage destfile="${result.exec.file}" xmlns:jacoco="antlib:org.jacoco.ant"
            exclclassloader = "sun.reflect.DelegatingClassLoader">
            <junit fork="true" forkmode="once" printsummary="on">
                <formatter type= "xml"/>
                <classpath>
                    <pathelement path="${dir.build}" />
                    <pathelement path="./ant/lib/jacocoagent.jar" />
                    <fileset dir ="C:\\Thejesh\\PIF\\Jars\\Common">
                        <include name ="*.jar*" />
                    </fileset>
                </classpath> 

                <batchtest todir ="${result.dir}">
                    <fileset dir= "${result.classes.instr.dir}">
                        <include name ="**/*Test.class*"/>
                    </fileset>
                </batchtest>
            </junit>
        </jacoco:coverage>
        <record name="${result.dir}/loggerinfo.log" loglevel="verbose" action="stop"/>

    </target>

    <!-- Generating code coverage reports -->
    <target name ="report" depends ="test">
        <jacoco:report>
            <executiondata>
                <file file="${result.exec.file}"/>
            </executiondata>

            <structure name="JUnit intergration report">
                <classfiles>
                    <fileset dir="${dir.build}"/>
                </classfiles>
                <sourcefiles encoding="UTF-8">
                    <fileset dir="${source.dir}"/>
                </sourcefiles>
            </structure>

            <html destdir="${result.report.dir}"/>
            <xml destfile ="${result.report.dir}/report.xml"/>

        </jacoco:report>
    </target>

    <target name ="compiler" >
        <junit.compile
            projectdir="${source.dir}"
            destfile="${dir.build}"
        />
    </target>



</project>
java junit ant jacoco powermockito
1个回答
0
投票

一种可以为您提供帮助的方法。希望有人可以建议一种更简单的方法-这是几年前升级到JUNIT5之前使用的build.xml的片段。

<junit printsummary="on" showoutput="off" fork="true"
      haltonerror="false" haltonfailure="false"
      errorproperty="junit.errors" failureproperty="junit.failures"  >
  <formatter type="plain"/>
  <formatter type="xml"/>

[您需要检查$ {result.dir}中从JUNIT4获取的哪些outout文件,并添加ant操作以将部分junit输出文件捕获并打印到控制台,以便最终错误行可见] >

<loadfile srcfile="${junit.stdout}" property="junit.summary">
      <filterchain><tailfilter lines="30"/></filterchain>
</loadfile>

<echo>${junit.summary}</echo>

然后在出现错误时退出构建:

<fail if="junit.failures">JUNIT failed - see ${result.dir}</fail>
<fail if="junit.errors"  >JUNIT error - see ${result.dir}</fail>
    
© www.soinside.com 2019 - 2024. All rights reserved.