CodeGym /Java Blog /ランダム /Java アサーション
John Squirrels
レベル 41
San Francisco

Java アサーション

ランダム グループに公開済み
Assert ステートメント Java では、実行中のプログラムの状態に関する特定の仮定をテストするために使用されます。これは、エラーを簡単に検出してプログラムをデバッグするのに役立ちます。Java のアサーション ステートメントは、Java のassert キーワードとそれに続くブール式を使用して記述されます。式が 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);
   }
}
ここでは式が true であるため、プログラムはそのまま作業を続行します。出力は期待どおりです。
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
この例では明らかに何かが間違っていました。x が 5 であり、アサーションではそれが 7 であると想定しているため、ここではAssertionErrorが発生するはずです。ここで何が問題になっているのでしょうか? Java アサーションは JVM で無効にできるだけなので、プログラムのエラー チェックの唯一の手段として使用すべきではないことに注意することが重要です。これらはデバッグやテストには役立ちますが、運用コードには依存しないでください。したがって、アサーションを使用するには、vm -ea (または -enableassertions) オプションを使用してアサーションを有効にする必要があります。コマンド ラインを使用している場合は、プログラム AssertDemo1 に次のコマンドを使用できます。
java -ea AssertDemo1
アサーションを有効にして同じプログラムを再実行すると、次の結果が得られます。
スレッド「メイン」java.lang.AssertionError での例外: AssertDemo1.main(AssertDemo1.java:4) の x は 7 である必要があります
それがポイントです。

IntelliJ IDEA で例外を有効にする方法

  1. 「実行」メニュー→「構成の編集...」に移動します。
  2. VM オプションの行に -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クラスのメソッドをテストするクラスを作成しましょう。確かに、そのうちの 2 つだけです。実際、引数の有効性やメソッドが特殊なケースを処理するかどうかなどをチェックするテストを作成できます。ただし、ここではデモンストレーションを目的としたいくつかのテストに限定します。
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メソッドは、2 つの値が等しいかどうか確認するアサーションです。値が等しくない場合は、テストが失敗したことを示すAssertionErrorがスローされます。単体テストでアサーションを使用すると、バグを発見し、さまざまな条件や入力の下でコードが正しく動作することを確認できます。割り算や掛け算などのテストを自分で追加してみてください。難しくない。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION