春アサートステートメント
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プロジェクト]にあります。