在 AntUnit 控制台日志中显示完整的异常堆栈跟踪

时间:2021-03-12 15:27:29

标签: java unit-testing ant

我正在使用 Apache AntUnit 对我已经实现的一些 Java Ant 任务进行单元测试。 但是,如果我的 Java Ant 任务抛出异常,则 AntUnit 控制台日志似乎只会输出异常的第一行,这对于确定问题不是很有用。 例如:

[au:antunit] Target: testMyAntTask  caused an ERROR
[au:antunit]    at line 52, column 166
[au:antunit]    Message: java.lang.NullPointerException
[au:antunit]    took 0.099 sec

在这里我只能看到抛出了 NullPointerException,但没有看到用于追踪问题根源的完整堆栈跟踪。

这是在通过单独的 build.xml 目标调用我的 AntUnit 测试脚本时发生的:

<target name="run-antunit-tests" description="Run ANT Unit tests" depends="jar">
    <taskdef resource="org/apache/ant/antunit/antlib.xml" uri="antlib:org.apache.ant.antunit" classpathref="my.classpath"/>
    
    <property name="antunit.results.dir" location="${basedir}/testResults/antunit-results"/>
    <delete dir="${antunit.results.dir}"/>
    <mkdir dir="${antunit.results.dir}"/>
    
    <au:antunit>
        <file file="antTaskUnitTests.xml"/>
        <au:plainlistener logLevel="info"/>
    </au:antunit>
</target>

更改为:plainlistener logLevel:<au:plainlistener logLevel="debug"/> 没有任何区别。

要实际获取信息(输出到单独的 XML 文件),我可以使用 xmllistener

<au:antunit>
    <file file="antTaskUnitTests.xml"/>
    <au:plainlistener logLevel="info"/>
    <au:xmllistener logLevel="info" toDir="${antunit.results.dir}"/>
</au:antunit>

然后会在 antunit.results.dir 中生成一个 xml 文件,对于这个 NullPointerException 示例(为了简洁而被截断):

 <testcase name="testMyAntTask">
    <error columnnumber="167" linenumber="52" message="java.lang.NullPointerException" type="org.apache.tools.ant.BuildException">C:\dev\antTaskUnitTests.xml:52: java.lang.NullPointerException
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:116)
    at org.apache.tools.ant.Task.perform(Task.java:348)
...

通过此堆栈跟踪,我可以找到问题所在。 但是,为了便于使用,我希望将此堆栈跟踪输出到控制台,而普通侦听器似乎没有提供任何输出选项。

我在使用 Ant JUnit 测试时遇到了类似的问题,并希望将异常的完整堆栈跟踪显示到控制台。我发现通过使用 junit brief formatter,堆栈跟踪被输出。似乎没有 AntUnit 等价物。

控制台更可取的原因是这些单元测试将在 Jenkins 上运行,我不想手动检查工作区以询问 AntUtil 输出的 XML 文件。

有谁知道如何在不实现我自己的 AntUnitListener 的情况下实现这一目标?

0 个答案:

没有答案
相关问题