gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:17:55 24 4
gpt4 key购买 nike

我在 Ant 构建中使用 Jacoco 代码覆盖率,并且在为我的 junit 类使用 Instrument 后构建成功,因为它们中有 powermockito。
当我运行 ant 时,我在 junit 类中遇到错误,测试失败,但构建成功。我使用另一个 build.xml 中的 WAS 服务器 jar 来编译 src 和测试类,并将类文件放置在 dir.build 文件夹中。该文件夹作为仪器任务的输入给出,以便为我提供仪器类。当 junit 任务启动时,它说测试类中发生错误并且测试失败。我使用了 printsummary ="on" 并尝试使用 verbose 生成日志。
我想知道运行junit时发生了什么错误。有人可以告诉我如何查看测试类中的错误吗?

<?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>

最佳答案

一种可能对您有帮助的方法。希望有人可以建议一种更简单的方法 - 这是我几年前在升级到 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 获得的输出文件,并添加 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>

关于java - 在 Ant 构建中运行 jacoco 时如何查找 junit 类中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62357562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com