如何将 JUnit Ant 任务配置为仅在失败时生成输出?

Posted

技术标签:

【中文标题】如何将 JUnit Ant 任务配置为仅在失败时生成输出?【英文标题】:How do I configure JUnit Ant task to only produce output on failures? 【发布时间】:2009-06-08 05:02:09 【问题描述】:

我正在 Ant 中配置 JUnit,以便在每次构建时都运行单元测试。我希望在运行时将 failing 测试的输出打印在 Ant 控制台输出中。我不需要看到任何后续测试的输出。

这是我的build.xml 文件的相关位:

<junit>
    <classpath>
        <pathelement path="$build"/>
    </classpath>
    <formatter type="brief" usefile="false"/>
    <batchtest>
        <fileset dir="$src" includes="my/tree/junit/"/>
    </batchtest>
</junit>

这几乎产生了我想要的结果,失败的测试在 Ant 输出中详细说明,除了成功的测试还编写以下输出:

 [junit] 测试套件:my.tree.junit.ExampleTest
    [junit] 测试运行:7,失败:0,错误:0,经过时间:0.002 秒

我相信我已经尝试了JUnit task 文档中列出的所有组合,包括:

printsummary属性 showoutput属性 formatter 元素与每种type

我的用例是从命令行运行ant。当我编写更多测试时,我不希望后续测试的输出太大以至于失败测试的输出滚动到屏幕外。我只想让ant 保持安静,除非有一个失败的测试需要我注意。如何配置 Ant/JUnit 来执行此操作?

我使用的是 Ant 版本 1.6.4 和 JUnit 4.6。

【问题讨论】:

刚刚添加了自定义 JUnit 自定义测试运行器的可能性。 【参考方案1】:

一种可能性是使用“classname”属性定义您自己的 xml 格式化程序(并扩展 org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,可能对 endTest() or endTestsuite() methods 不执行任何操作)。 该格式化程序将忽略信息消息并仅显示失败消息。


注意:this settings 提到了只显示失败测试的可能性:

<junit showoutput="true"
       fork="true"
       failureproperty="tests.failed"
       errorproperty="tests.failed">
    <batchtest todir="$test.results.dir">
        <fileset dir="test">
            <include name="**/*Test.java"/>
        </fileset>
    </batchtest>
    <classpath path="$classes.dir:$junit.jar:$test.classes.dir"/>
    <formatter usefile="false" type="brief"/>
    <!-- <formatter type="xml"/> If missing, only displays failed tests -->
</junit>

你测试了吗?

注意:“showoutput="true"&lt;formatter type="brief" usefile="false"/&gt;”可能有点问题,如 recent (February 2012) ticket 所示)


另一种方法是定义您的 ant Juint 测试运行器,支持 ant JUnitResultFormatter 并仅显示 stderr 消息。

eclipse 中的EclipseTestRunner 就是一个很好的例子。

【讨论】:

谢谢,您展示的示例与我在问题中发布的示例基本相同,因此我认为差异可能与在 Netbeans 上下文中运行它有关。我将尝试实现自定义格式化程序,但我希望避免这样做。 我实现了一个自定义格式化程序并且能够实现我最初的目标。 @Greg:太好了。如果自定义格式化程序不是太大,你能把它贴在这里(或者至少是只打印错误消息的部分)吗? 注意:截至 2012 年 3 月 27 日,“此设置”已失效 @stevebot 好的,我找到了另一个链接,说明并使用了相同的 JUnit 配置。我已经编辑了答案。

以上是关于如何将 JUnit Ant 任务配置为仅在失败时生成输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 JUnit 测试(从 Ant 脚本驱动)转储导致失败的异常堆栈?

使用 Ant 任务为 Oracle 配置 worklight Server 失败

Android - 仅在发布版本变体上执行 Gradle 任务

将 Spring Security(双向 SSL)配置为仅对 CORS 预检 OPTIONS 请求进行身份验证

如果 exec 任务失败,如何使 ant 脚本失败

Ant <junitreport> 由于 Xalan 的 (XSLT) 安全处理功能而失败