0

与 XML Ant 宏相反,用 Java 实现的 Ant 任务具有为缺少的属性提供稍微不同的行为的特性。

在我的例子中,我试图<testng>用一个宏来包装用 Java 实现的 Ant 任务。具体来说,我想通过一些小的调整来公开 TestNG ant 任务提供的大部分功能。

在其他类似的属性中,timeOut似乎有点难以重现,因为它的省略与指定和空字符串的行为不同。

这是我的宏定义的简化版本:

<macrodef name="my-wrapper">
  <attribute name="timeOut" default=""/>
  <element name="nested-elements" optional="true" implicit="true"/>
  <sequential>
    <testng timeOut="@{timeOut}">
      <nested-elements/>
    </testng>
  </sequential>
</macrodef>

失败是因为 Ant 尝试将值转换为整数:

Can't assign value '' to attribute timeout, reason: class java.lang.NumberFormatException with message 'For input string: ""'

有人建议我使用<augment>,这似乎是解决此问题的方法。但是,我不明白应该如何使用它:

<macrodef name="my-wrapper">
  <attribute name="timeOut" default=""/>
  <element name="nested-elements" optional="true" implicit="true"/>
  <sequential>
    <augment unless:blank="timeOut" id="invocation" timeOut="@{timeOut}"/>
    <testng id="invocation">
      <nested-elements/>
    </testng>
  </sequential>
</macrodef>

由于前向引用,上述失败:

java.lang.IllegalStateException: Unknown reference "invocation"

颠倒 and 的顺序<testng><augment>没有真正起作用,因为任务在被扩充<testng>之前开始执行。

我需要的是一种有条件地将 XML 属性添加到任务调用的方法。这只能使用 Ant XML 语法吗?

4

1 回答 1

0

在这种情况下,最简单的解决方案就是将默认值设置为timeOut有效值。它需要一个可以解析为整数的字符串,因此-1如果您不希望有最大超时,请尝试使用。

<macrodef name="my-wrapper">
  <attribute name="timeOut" default="-1"/>
  <element name="nested-elements" optional="true" implicit="true"/>
  <sequential>
    <testng timeOut="@{timeOut}">
      <nested-elements/>
    </testng>
  </sequential>
</macrodef>
于 2019-02-25T22:15:17.890 回答