如何在代码中为junit测试禁用java断言(不是junit assert)
我编写了一个junit测试,但是当我运行它时它没有按预期失败,因为断言已启用,而它们不在生产中.
有没有办法在代码中禁用断言,以便它在IDE中运行时以及作为Maven的一部分构建时按预期工作
通常,您可以使用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>
Run Code Online (Sandbox Code Playgroud)
如果测试是通过IDE(在maven之外)启动的,则可能需要编辑一些启动配置并传递参数.但是,这取决于IDE.
在Java中(在单个类中禁用断言)
要在Java中启用或禁用断言检查,请使用ClassLoader中的setClassAssertionStatus。例如:
Foo.class.getClassLoader().setClassAssertionStatus(Foo.class.getName(), false);
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
使用JUnit 4 Assume(用于单个测试用例)
理想情况下,无论启用或禁用断言,您的测试都应通过。如果测试之一取决于禁用的断言,则预期的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();
}
Run Code Online (Sandbox Code Playgroud)
注意:我通常以相反的方式使用此选项:为了检查是否assert按预期工作,在极少数情况下,我进行了一个测试,假定已启用断言检查。
使用JUnit 5时
JUnit 5假设是JUnit 4假设的扩展。因此,对于JUnit 5,对JUnit 4代码的唯一更改是导入,该导入现在来自jupiter:
import static org.junit.jupiter.api.Assumptions.assumeTrue;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3893 次 |
| 最近记录: |