gpt4 book ai didi

java - 如何在代码中为 junit 测试禁用 Java 断言

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:41 25 4
gpt4 key购买 nike

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

我已经编写了一个 junit 测试,但是当我运行它时,它并没有像预期的那样失败,因为断言已启用,而它们并未在生产中。

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

最佳答案

在 Java 中(在单个类中禁用断言)

要在 Java 中启用或禁用断言检查,请使用 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 Assume(针对单个测试用例)

理想情况下,无论断言是启用还是禁用,您的测试都应该通过。如果其中一项测试依赖于被禁用的断言,则预期的 JUnit 机制是使用 assumption :

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 assumptions是 JUnit 4 的扩展。因此,对于 JUnit 5,对 JUnit 4 代码的唯一更改是导入,它现在来自 jupiter:

import static org.junit.jupiter.api.Assumptions.assumeTrue;

关于java - 如何在代码中为 junit 测试禁用 Java 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com