簡體   English   中英

如何在代碼中禁用 junit 測試的 Java 斷言

[英]How do I disable Java assertions for a junit test in the code

如何在代碼中為 junit 測試禁用 java 斷言(不是 junit 斷言)

我已經編寫了一個 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>

如果測試是通過IDE(在maven之外)啟動的,則可能需要編輯一些啟動配置並傳遞參數。 但是,這取決於IDE。

在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 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();
}

注意:我通常以相反的方式使用此選項:要檢查assert按預期工作,在極少數情況下,我有一個假定斷言檢查已啟用的測試

使用JUnit 5 Assume

JUnit 5假設是JUnit 4的擴展。 因此,對於JUnit 5,對JUnit 4代碼的唯一更改是導入,現在來自jupiter:

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

查看java工具的-da-ea 參數 因此,在您的情況下,只需使用其中一個(+在應用程序中指定對應的包),因為您要禁用或啟用斷言。

注意:如果您在測試期間禁用斷言,您是否完全使用此類 (java) 斷言? 如果沒有,只需刪除給定的斷言! 它只是樣板文件。

如果您使用它(在某些 UI 測試、驗收測試或性能測試中)並且因此您期望給定的斷言會捕獲一些回歸並且它們不會在正常發布管道中被觸發,那么檢查是否有人沒有在不知情的情況下刪除了這樣的斷言!

您可以在測試中預期異常(AssertionError extends Error extends Throwable)。 例如,在 junit 測試中使用assertThrows

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM