我知道,如果我想要jUnit测试的xml输出,我可以使用Ant任务"jUnit"来生成这样的输出。我想扩展此生成的 xml 文件中显示的信息量。我的类文件中还有其他信息,我也希望在 XML 文件中提供这些信息。
我的问题是:
- xml 文件中的信息来自哪里?
- 信息是否来自特定的 jUnit 运行器类用于运行测试?
- jUnit 任务是否仅格式化接收到的信息,还是生成信息本身?
- jUnit Ant 任务会更改接收到的信息吗?(所以它会仅显示特定信息并过滤掉我想要的所有内容添加(
JUnit 任务的 XML 格式化程序在类 org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter
中实现,类 是在执行 JUnit 测试期间接收事件的侦听器。例如,当收到"测试结束"事件时,格式化程序会在内存中追加一个 XML 元素以进行测试。这是源代码的链接。
根据我从代码中读到的内容:
-
XML 的模式是在 Ant 任务的代码中定义的。特别是上面提到的类。该架构在 JUnit XML 输出规范中进行了讨论。报告的内容,例如测试名称和类名,是从 JUnit 测试类本身获取的。下面是检索测试名称的方法的 Javadoc:
JUnit 3.7 引入了 TestCase.getName((,后续版本的 JUnit 删除了旧的 name(( 方法。此方法通过反射提供对测试用例名称的访问,该反射应该适用于 JUnit 3.7 之前和之后的版本。
从 Ant 1.5.1 开始,此方法将在 Test 的任何实现上调用
"public String getName()"
(如果存在(。由于 Ant 1.7 也显式检查了 JUnit4TestCaseFacade。这由junit.framework.JUnit4TestAdapter使用。
-
该任务不仅格式化输出。它使用上述格式化程序生成所有报告本身。一些可能有助于扩展格式化程序的帖子:
如何将 JUnit Ant 任务配置为仅在故障时生成输出?
自定义 JUnit 报告?
建议的解决方案是编写一个扩展
org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter
的自定义格式化程序类,并在formatter
元素的classname
属性中提供它。