我正在使用JUnit4,希望在JUnit报告中显示一些额外的信息。为此,我将把额外的信息转储到报告xml中,然后修改xslt以读取额外的信息来生成HTML报告。
到目前为止,有效的步骤是:
- 将XMLJUnitResultFormatter中的所有代码复制到MyFormatter.java中,并修改endTest()方法,将额外信息以额外属性的形式添加到testcase XML标记中。这真的很糟糕:(但我不能简单地重写它,因为在endTest()方法中直接使用私有实例变量而不使用getters/ssetter
我的下级任务:
<junit fork="yes" printsummary="withOutAndErr">
<!--<formatter type="xml"/>-->
<formatter classname="com.some.junit.MyFormatter" extension=".xml"/>
<test name="com.some.source.MyTestClassTest" todir="${junit.output.dir}"/>
<classpath refid="JUnitProject.classpath"/>
</junit>
- 修改xslt以读取TESTCASE xml标记的额外属性并在报告中显示
我为报告修改的蚂蚁任务:
<target name="junitreport" depends="MyTestClassTest">
<junitreport todir="${junit.output.dir}">
<fileset dir="${junit.output.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report styledir="reportstyle" format="frames" todir="${junit.output.dir}"/>
</junitreport>
</target>
我发现使用TestNG或SureFire Maven插件作为解决方案,但我不能在我的项目中使用它们。
在JUnit4中还有比这更好的方法吗?
也许?
接口org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter
是定制输出格式所需要实现的。这可以写入任何输出流,这是构建在框架中的所有可扩展性。您是对的,没有一个好的方法可以扩展XMLJUnitResultFormatter
的功能来定制输出。复制粘贴修改当然不理想,但肯定是可以接受的。
另一种方法可能是在ant
任务中定义多个formatter
。一个可以是常规的xml
格式化程序,另一个是您的自定义格式化程序以获取更多信息。这两个文件可以组合起来,然后使用xsl
转换转换为HTML。
我让你来决定这是否是一种比你设计的更好的方法。