我维护着一个我们较大的组织用于其 ant 配置文件的库。我正在尝试从 junit 4 后端更新到 junit 5 后端,同时尽量减少对最终用户的干扰。
我遇到的主要问题是输出格式化程序。我们有一个接受 <element name="test-formatter"/>
的 macrodef像这样使用
<runmultipletest foo=...>
<test-formatter>
<formatter type="plain" usefile="false" />
<formatter type="xml" usefile="true" />
</test-formatter>
<runmultipletest-fileset>
<fileset refid="${junit.integration.fileset}"/>
</runmultipletest-fileset>
</runmultipletest>
在 macrodef 中,这是被输入的
<batchtest todir="@{test.todir}" skipNonTests="@{skipNonTests}">
<test-formatter/>
<runmultipletest-fileset/>
</batchtest>
现在我正在升级到 junit 5。是否有可能在不破坏与最终用户用来转换现有格式的向后兼容性的情况下
<formatter type="plain" usefile="false" />
<formatter type="xml" usefile="true" />
进入
<listener type="legacy-plain" sendSysOut="true" sendSysErr="true"/>
<listener type="legacy-xml" sendSysErr="true" sendSysOut="true" outputDir="@{test.todir}"/>
从我的 macrodef 里面?我可以弄清楚 XSLT 将 xml 转换为我想要的内容,但我对 Ant 的了解还不够,无法知道是否可以转换传入的元素然后得到 junitlauncher
。使用它。
最佳答案
嗯,我不清楚你是如何从 JUnit 4
切换的至 JUnit 5
, 无论如何你可以将参数传递给 macrodef
为了改变test-formatter
的内容,如下所示:
<macrodef name="test-formatter">
<attribute name="version" />
<sequential>
<if>
<equals arg1="@{version}" arg2="5" />
<then>
<listener type="legacy-plain" sendSysOut="true" sendSysErr="true"/>
<listener type="legacy-xml" sendSysErr="true" sendSysOut="true" outputDir="@{test.todir}"/>
</then>
<else>
<formatter type="plain" usefile="false" />
<formatter type="xml" usefile="true" />
</else>
</if>
</sequential>
</macrodef>
因此,当您执行测试时,您可以选择使用哪个测试格式化程序:
<batchtest todir="@{test.todir}" skipNonTests="@{skipNonTests}">
<test-formatter />
<runmultipletest-fileset />
</batchtest>
而不是:
<batchtest todir="@{test.todir}" skipNonTests="@{skipNonTests}">
<test-formatter version="5" />
<runmultipletest-fileset />
</batchtest>
如果我是对的,并且您已经拥有一个包含 JUnit
的属性version 您可以将其作为参数传递给 test-formatter
如上所述。
希望对你有帮助,再见。
关于java - 在更新到 junit 5 时保持 build.xml 的语法兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57334404/