1概要

このチュートリアルでは、https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/Assert.html[Spring

Assert

]の目的に焦点を当てて説明します。クラスとそれを使用する方法を示します。


2

Assert

クラスの目的

Springの

Assert

クラスは引数の検証に役立ちます。


Assert

クラスのメソッドを使うことで、私たちが真実であると期待する仮定を書くことができます。

もしそれらが満たされなければ、ランタイム例外が投げられます。



Assert

のメソッドは、Javaのhttps://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html[

assert

]ステートメントと比較できます。条件が失敗すると、Javaの

assert

ステートメントは実行時に

Error

をスローします。興味深い事実は、これらのアサーションを無効にできることです。

Springの

Assert

のメソッドの特徴は次のとおりです。


  • Assert

    のメソッドは静的です

  • それらは

    IllegalArgumentException

    またはを投げます


IllegalStateException

** 最初のパラメータは通常、検証のための引数または論理値です。

確認する条件
** 最後のパラメータは通常、表示される例外メッセージです。

検証が失敗した場合
** メッセージは

String

パラメータとしても、または


__仕入先<文字列>

__パラメータ

同様の名前にもかかわらず、Springアサーションはhttps://junit.org/[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

条件を受け入れ、条件が偽のときに

IllegalArgumentException

をスローします。


4.2.



state()



  • state()

    メソッドは

    isTrue()

    と同じシグネチャを持ちますが、__IllegalStateExceptionをスローします。

名前が示すように、オブジェクトの違法な状態のためにメソッドを継続する必要がない場合に使用する必要があります。

自動車が走っている場合は

fuel()

メソッドを呼び出すことができないと想像してください。

この場合は

state()

アサーションを使用しましょう。

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

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



5. オブジェクトと型Assertio


ns


5.1.



notNull()



notNull()

メソッドを使用して、オブジェクトが

null

ではないと想定することができます。

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


5.2.

無効です()


一方、

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);
   //...
}

この例では、

ToyotaEngine

が__Engineのサブクラスであるため、チェックは成功します。


5.4.

isAssignable()


型を確認するには、

Assert.isAssignable()

を使用します。

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

最近の2つの表明は

is-a

関係を表しています。

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

テキストアサーションは、

String

引数のチェックを実行するために使用されます。


6.1.

hasLength()



has

length()

メソッドを使用して、

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()

メソッドはコレクションが空ではないことを表明します。

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フレームワーク内で広く使用されていますが、それを利用することでより堅牢で表現力豊かなコードを簡単に書くことができます。

いつものように、この記事の完全なコードはhttps://github.com/eugenp/tutorials/tree/master/spring-5[GitHubプロジェクト]にあります。