如何在代码中禁用 Junit 测试的 Java 断言
如何在代码中禁用 java 断言(不是 junit 断言)以进行 junit 测试
Ive 写了一个 junit 测试,但当我运行它时,它不会按预期失败,因为断言是启用的,而它们不在生产环境中。
有没有办法在代码中禁用断言,以便在IDE中运行以及作为Maven的一部分构建时按预期工作
如何在代码中禁用 java 断言(不是 junit 断言)以进行 junit 测试
Ive 写了一个 junit 测试,但当我运行它时,它不会按预期失败,因为断言是启用的,而它们不在生产环境中。
有没有办法在代码中禁用断言,以便在IDE中运行以及作为Maven的一部分构建时按预期工作
在 Java 中(禁用单个类中的断言)
要在 Java 中启用或禁用断言检查,请使用 ClassLoader 中的 setClassAssertionStatus。例如:
Foo.class.getClassLoader().setClassAssertionStatus(Foo.class.getName(), false);
在 Maven 中(禁用所有类的断言)
从版本2.3.1开始,Maven Surefire有一个单独的enableAssertions标志。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>your_version</version>
<configuration>
<enableAssertions>false</enableAssertions>
</configuration>
</plugin>
使用 JUnit 4 假设(用于单个测试用例)
理想情况下,无论启用还是禁用断言,测试都应通过。如果其中一个测试依赖于被禁用的断言,则预期的 JUnit 机制是使用一个假设:
import static org.junit.Assume.assumeTrue;
@Test
public foo onlyWithoutAssertions() {
assumeTrue(assertionsDisabled());
// your tricky test comes here, and is only executed in
// environments with assertion checking disabled.
}
public static boolean assertionsDisabled() {
return !Foo.class.desiredAssertionStatus();
}
注意:我通常以另一种方式使用此选项:为了检查是否按预期工作,在极少数情况下,我有一个假设已启用断言检查的测试。assert
使用 JUnit 5 假设
JUnit 5 假设是 JUnit 4 假设的扩展。因此,对于 JUnit 5,对 JUnit 4 代码的唯一更改是 import,它现在来自 jupiter:
import static org.junit.jupiter.api.Assumptions.assumeTrue;
通常,您将 surefire 与 maven 一起使用以进行 JUnit 测试。添加 或 同义词作为参数应该有效:-disableassertions
-da
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>your_version</version>
<configuration>
<argLine>-disableassertions</argLine>
</configuration>
</plugin>
如果测试是通过 IDE 以不同方式启动的(即在 maven 之外),则可能需要编辑一些启动配置并传递参数。但是,这与 IDE 有关。