java - 在更新到 junit 5 时保持 build.xml 的语法兼容性

标签 java junit ant junit4 junit5

我维护着一个我们较大的组织用于其 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/

相关文章:

java - 为什么 list.parallelStream().forEach() 不处理 Java 中列表中的所有元素?

Java : what debug to add to find what caused a process to hang

java - 在 JUnit 中模拟 Git 仓库

java - 如何使用 Mockito 测试 sendEmail() 方法而不发送电子邮件?

javascript - Java 返回 cannont invoke ScriptEngine 错误

运行ant时出现java.lang.NoClassDefFoundError

java - 自从 @SpringApplicationConfiguration、@WebIntegration 在 Spring Boot 框架中被弃用以来,正确的注释是什么?

java - 为什么 Ant 删除任务不起作用?

maven-2 - 从Ant使用Maven

ant - 如何从 zipfileset 中排除空目录