1. 概要

このチュートリアルでは、 Spring Assert クラスの目的に焦点を当てて説明し、その使用方法を示します。

2. アサートクラスの目的

Spring Assert クラスは、引数の検証に役立ちます。 Assertクラスのメソッドを使用することで、真であると期待される仮定を記述できます。そして、それらが満たされない場合、実行時例外がスローされます。

Assertのメソッドは、Java assertステートメントと比較できます。 Java assert ステートメントは、その条件が失敗した場合、実行時にErrorをスローします。 興味深い事実は、これらのアサーションを無効にできることです。

Spring Assertのメソッドのいくつかの特徴は次のとおりです。

  • Assertのメソッドは静的です
  • IllegalArgumentExceptionまたはIllegalStateExceptionのいずれかをスローします
  • 最初のパラメーターは通常、検証用の引数またはチェックする論理条件です。
  • 最後のパラメータは通常、検証が失敗した場合に表示される例外メッセージです。
  • メッセージは、次のいずれかとして渡すことができます。パラメータまたはとしてサプライヤーパラメータ

また、同じような名前にもかかわらず、SpringアサーションはJUnitや他のテストフレームワークのアサーションと何の共通点もないことにも注意してください。 Springアサーションはテスト用ではなく、デバッグ用です。

3. 使用例

パブリックメソッドdrive()を使用してCarクラスを定義しましょう。

public class Car {
    private String state = "stop";

    public void drive(int speed) {
        Assert.isTrue(speed > 0, "speed must be positive");
        this.state = "drive";
        // ...
    }
}

速度が正の数でなければならないことがわかります。 上記の行は、条件をチェックし、条件が失敗した場合に例外をスローする簡単な方法です。

if (!(speed > 0)) {
    throw new IllegalArgumentException("speed must be positive");
}

Assertのパブリックメソッドには、おおよそこのコードが含まれています。これは、アプリケーションが回復することを期待されていない実行時例外を伴う条件付きブロックです。

負の引数を指定してdrive()メソッドを呼び出そうとすると、IllegalArgumentException例外がスローされます。

Exception in thread "main" java.lang.IllegalArgumentException: speed must be positive

4. 論理アサーション

4.1. isTrue()

このアサーションについては上記で説明しました。 boolean 条件を受け入れ、条件がfalseの場合はIllegalArgumentExceptionをスローします。

4.2. 州()

state()メソッドは、 isTrue()と同じ署名を持ちますが、IllegalStateException。をスローします。

名前が示すように、オブジェクトの状態が不正であるためにメソッドを続行してはならない場合に使用する必要があります。

車が走っている場合、fuel()メソッドを呼び出すことができないと想像してください。 この場合、 state()アサーションを使用してみましょう。

public void fuel() {
    Assert.state(this.state.equals("stop"), "car must be stopped");
    // ...
}

もちろん、論理アサーションを使用してすべてを検証できます。 ただし、読みやすくするために、コードをより表現力豊かにする追加のアサーションを使用できます。

5.5。 オブジェクトとタイプのアサート ns

5.1. notNull()

notNull()メソッドを使用すると、オブジェクトはnullではないと見なすことができます。

public void сhangeOil(String oil) {
    Assert.notNull(oil, "oil mustn't be null");
    // ...
}

5.2. isNull()

一方、 isNull()メソッドを使用して、オブジェクトがnullであるかどうかを確認できます。

public void replaceBattery(CarBattery carBattery) {
    Assert.isNull(
      carBattery.getCharge(), 
      "to replace battery the charge must be null");
    // ...
}

5.3. isInstanceOf()

オブジェクトが特定のタイプの別のオブジェクトのインスタンスであるかどうかを確認するには、 isInstanceOf()メソッドを使用できます。

public void сhangeEngine(Engine engine) {
    Assert.isInstanceOf(ToyotaEngine.class, engine);
    // ...
}

この例では、 ToyotaEngineEngine。のサブクラスであるため、チェックは正常に合格します。

5.4. isAssignable()

タイプを確認するには、 Assert.isAssignable()を使用できます。

public void repairEngine(Engine engine) {
    Assert.isAssignable(Engine.class, ToyotaEngine.class);
    // ...
}

最近の2つのアサーションは、is-aの関係を表しています。

6. テキストアサーション

テキストアサーションは、String引数のチェックを実行するために使用されます。

6.1. hasLength()

hasLength()メソッドを使用して、 String が空白でないかどうか、つまり少なくとも1つの空白が含まれているかどうかを確認できます。

public void startWithHasLength(String key) {
    Assert.hasLength(key, "key must not be null and must not the empty");
    // ...
}

6.2. hasText()

hasText()メソッドを使用して、条件を強化し、Stringに少なくとも1つの非空白文字が含まれているかどうかを確認できます。

public void startWithHasText(String key) {
    Assert.hasText(
      key, 
      "key must not be null and must contain at least one non-whitespace  character");
    // ...
}

6.3. doesNotContain ()

doesNotContain()メソッドを使用して、String引数に特定のサブ文字列が含まれていないかどうかを判断できます。

public void startWithNotContain(String key) {
    Assert.doesNotContain(key, "123", "key mustn't contain 123");
    // ...
}

7. コレクションとマップのアサーション

7.1. コレクションのnotEmpty()

名前が示すように、 notEmpty()メソッドは、コレクションが空ではないことを表明します。つまり、コレクションは null ではなく、少なくとも1つの要素を含みます。

public void repair(Collection<String> repairParts) {
    Assert.notEmpty(
      repairParts, 
      "collection of repairParts mustn't be empty");
    // ...
}

7.2. マップのnotEmpty()

同じメソッドがマップに対してオーバーロードされ、マップが空ではなく、少なくとも1つのエントリが含まれているかどうかを確認できます。

public void repair(Map<String, String> repairParts) {
    Assert.notEmpty(
      repairParts, 
      "map of repairParts mustn't be empty");
    // ...
}

8. アレイアサーション

8.1. アレイの場合はnotEmpty()

最後に、 notEmpty()メソッドを使用して、配列が空ではなく、少なくとも1つの要素が含まれているかどうかを確認できます。

public void repair(String[] repairParts) {
    Assert.notEmpty(
      repairParts, 
      "array of repairParts mustn't be empty");
    // ...
}

8.2.  noNullElements()

noNullElements()メソッドを使用して、配列にnull要素が含まれていないことを確認できます。

public void repairWithNoNull(String[] repairParts) {
    Assert.noNullElements(
      repairParts, 
      "array of repairParts mustn't contain null elements");
    // ...
}

null 要素が含まれていない限り、配列が空の場合でもこのチェックに合格することに注意してください。

9. 結論

この記事では、Assertクラスについて説明しました。 このクラスはSpringフレームワーク内で広く使用されていますが、このクラスを利用して、より堅牢で表現力豊かなコードを簡単に作成できます。

いつものように、この記事の完全なコードはGitHubプロジェクトにあります。