CodeGym /Java Blog /Toto sisi /Java 斷言
John Squirrels
等級 41
San Francisco

Java 斷言

在 Toto sisi 群組發布
Java 中的 Assert 語句用於測試有關程式執行期間​​狀態的某些假設。這有助於輕鬆檢測錯誤並調試程式。Java 中的斷言語句是使用 Java 斷言關鍵字後面跟著布林表達式來編寫的。如果表達式的計算結果為 true,則斷言會默默地通過,並且程式會執行其工作。如果其計算結果為 false,則斷言失敗並拋出AssertionError 。讓我們來看一個帶有 Java 斷言的程式範例。
//Assertion in Java example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 5 : "x should be 5";
       System.out.println(x);
   }
}
這裡的表達式為真,因此程式繼續其工作。輸出正如預期的那樣:
5

斷言錯誤範例

在 Java 中,AssertionError是Error類別的子類,當斷言失敗時會拋出該錯誤。Java 中的斷言通常用於檢查前置條件、後置條件或不變量是否成立。正如我們下面所說的,當斷言語句無法計算為 true 時,會拋出AssertionError 。現在讓我們重寫程序,使布林表達式為 false。
//AssertionError example
public class AssertDemo1 {
   public static void main(String[] args) {
       int x = 5;
       assert x == 7 : "x should be 7";
       //here should be AssertionError
       System.out.println(x);
   }
}
好吧,我們運行它,輸出是......
5
我們的例子中肯定出了問題!我們這裡應該有一個AssertionError,因為我們的 x 是 5,而斷言期望它是 7。這裡出了什麼問題?需要注意的是,Java 斷言可以在 JVM 中停用,因此不應將它們用作程式中錯誤檢查的唯一方法。它們對於調試和測試很有用,但不應該依賴生產程式碼。因此,要使用斷言,您需要使用 vm -ea(或 -enableassertions)選項啟用它們。如果您使用命令列,則可以對程式 AssertDemo1 使用下一個命令:
java -ea AssertDemo1
如果您啟用斷言並重新運行相同的程序,您將獲得下一個:
執行緒「main」中的例外 java.lang.AssertionError: x 應該是 7 at AssertDemo1.main(AssertDemo1.java:4)
這才是重點。

如何在 IntelliJ IDEA 中啟用異常

  1. 前往“運行”選單→“編輯配置...”
  2. 在 VM options 行輸入 -ea 參數
Java 斷言 - 1現在斷言已啟用,您可以使用它們。

Java 單元測試的斷言

在 Java 中,單元測試是一種涉及測試各個程式碼模組以確保它們正常運作的技術。 斷言通常用於 Java 的單元測試中,以驗證測試的程式碼是否如預期般運作。在單元測試中,程式碼單元(例如特定方法)被單獨測試,以確保它在不同條件和輸入下正常運作。讓我們舉個例子。這裡我們有一個簡單的計算器,可以進行 2 整數的加法、減法、乘法和除法運算。
public class MyMath {

   public static int add (int a, int b) {
       return a + b;
   }

   public static int sub (int a, int b) {
       return a - b;
   }

   public static int mult (int a, int b) {
       return a*b;
   }

   public static double div (int a, int b) {
       return a/b;
   }
}
當然,關於這個實作有很多問題(例如,如果我們將最大的 int 添加到另一個數字會發生什麼),但現在我們將保持這個實現不變。現在讓我們編寫一個類,在單元測試的幫助下,我們將在其中測試myMath類的方法。確實,只有他們兩個。事實上,您可以編寫測試來檢查參數的有效性、方法是否處理特殊情況等等。但在這裡,我們將僅限於幾個用於演示目的的測試。
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class MyMathTesting {
   @Test
   public void testAdd() {
       MyMath calculator = new MyMath();
       int sum = calculator.add(2, 3);
       assertEquals(5, sum);
   }

   @Test
   public void testSub() {
       MyMath calculator = new MyMath();
       int sub = calculator.sub(5, 2);
       assertEquals(3, sub);
   }

}
assertEquals方法是檢查兩個值是否相等斷言。如果值不相等,則會拋出斷言錯誤,表示測試失敗。在單元測試中使用斷言可以幫助您捕獲錯誤並確保您的程式碼在不同條件和輸入下正常運作。嘗試自行加入此類除法和乘法測試。這並不難。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION