如何将 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"
和 <formatter type="brief" usefile="false"/>
”可能有点问题,如 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 任务