如何在代码中禁用junit测试的Java断言

Pau*_*lor 7 java junit assert

如何在代码中为junit测试禁用java断言(不是junit assert)

我编写了一个junit测试,但是当我运行它时它没有按预期失败,因为断言已启用,而它们不在生产中.

有没有办法在代码中禁用断言,以便它在IDE中运行时以及作为Maven的一部分构建时按预期工作

Mag*_*lex 8

通常,您可以使用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.

  • 我将通过类或包禁用它们,如下所述:http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html#enable-disable (2认同)

ava*_*sen 7

在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)