断言

assertions 类型用于启用或禁用整个 Java 程序或程序组件的 Java 1.4 断言功能。它可以在 <java><junit> 中使用,为代码添加额外的验证。

断言在 Java SE 文档Java 语言规范 中有介绍。

需要注意的关键点是,当断言失败时会抛出 java.lang.AssertionError,并且该功能仅在 Java 1.4 及更高版本中可用。要启用断言,必须在编译源代码时在 <javac> 中设置 source=1.4(或更高版本),并且代码必须包含要测试的 assert 语句。此操作的结果是代码既不能在早期版本的 Java 上编译也不能运行。出于这个原因,Apache Ant 本身目前不包含任何断言。

当通过嵌套的断言元素在任务中启用(或禁用)断言时,类加载器或命令行会使用相应的选项进行修改。这意味着执行的 JVM 必须是 1.4 或更高版本,即使代码中没有断言。尝试在早期版本的 JVM 上启用断言会导致“无法识别的选项”错误,并且 JVM 不会启动。

属性

属性 描述 必需
enableSystemAssertions 用于打开或关闭系统断言的标志。 否;默认值为 未指定

当系统断言既未启用也未禁用时,JVM 不会收到任何断言信息——当前 JVM 的默认操作是禁用系统断言。

还要注意,没有明显的文档说明 JRE 的哪些部分包含有用的断言。

嵌套元素

enable

在代码的某些部分启用断言。如果未指定包或类,则在所有(用户)代码中启用断言。

属性 描述 必需
class 要启用断言的类的名称。
package 要对所有类启用断言的包的名称。(包括子包。)对匿名包使用 ...

disable

在代码的某些部分禁用断言。

属性 描述 必需
class 要禁用断言的类的名称。
package 要对所有类禁用断言的包的名称。(包括子包。)对匿名包使用 ...

由于断言默认情况下处于禁用状态,因此只有在父包中已启用断言的情况下,禁用断言才有意义。

示例

示例:在所有用户类中启用断言

所有不在 JRE 中的类(即所有非系统类)都将启用断言。

<assertions>
  <enable/>
</assertions>
示例:启用单个类

在名为 Test 的类中启用断言

<assertions>
  <enable class="Test"/>
</assertions>
示例:启用包

org.apache 包及其所有以 org.apache. 开头的包中启用断言

<assertions>
  <enable package="org.apache"/>
</assertions>
示例:系统断言

启用系统断言和所有 org.apache 包中的断言,除了 Ant(但包括 org.apache.tools.ant.Main

<assertions enableSystemAssertions="true">
  <enable package="org.apache"/>
  <disable package="org.apache.tools.ant"/>
  <enable class="org.apache.tools.ant.Main"/>
</assertions>
示例:禁用和匿名包断言

禁用系统断言;在匿名包中启用断言

<assertions enableSystemAssertions="false">
  <enable package="..."/>
</assertions>
示例:引用断言

此类型是一个数据类型,因此您可以声明断言并在以后使用它们

<assertions id="project.assertions">
  <enable package="org.apache.test"/>
</assertions>

<assertions refid="project.assertions"/>