はじめに
最近はSpringBootという便利なフレームワークを使用して日々業務を進めています。(それもひと段落つきそうですが)
まずは第一弾として、ここ最近で知ったアノテーションをまとめておきたいと思います。
※ほんの一部になる事ご承知おきください
** 対象者 **
- アノテーションについて学習を進めたい方
❓Java のアノテーションとは
改めてアノテーションについて。
→ アノテーションは、クラス、メソッド、フィールド、パラメータなどに付けられる "補助的なメタ情報"
→ ただのマーカーとして機能するもの(例:@Override)もあれば、値を持つもの(例:@DisplayName("説明"))もある。
→ ランタイムで読み取られて動作を制御したり、コンパイル時チェックやコード生成に使われたりする。
→ Spring やテストフレームワーク(JUnit, Mockito など)は、アノテーションを見て「このクラスはテストだ」「モックを挿入してほしい」などの仕組みを自動で適用している
🌱実装中に知ったアノテーション
| アノテーション | 説明 |
|---|---|
@Test |
そのメソッドがテストメソッドであることを表す。 |
@DisplayName |
テストクラスやテストメソッドに「人間向けの説明名」を与える |
@DisplayNameGeneration |
テストクラスやネストクラスにおける、表示名の自動生成ルールを指定する |
@Nested |
クラスの中にネストされたテストクラスを持たせる(テストグループ化) |
@Mock |
依存オブジェクトを "偽物(モック)" として振る舞わせる |
@InjectMocks |
モックやスパイされたオブジェクトを、このテスト対象のクラスに「注入(inject)」する |
@SpringBootTest |
Spring Boot のアプリケーションコンテキストを立ち上げてテストを実行する |
🌱補足説明
-
@SpringBootTestを付けると、Spring Boot の設定や Bean 定義などすべて読み込むので、本番に近い形でテストできる。だがそのぶん起動コストが高くなるという制約がある
-
Mockito の
@InjectMocksは、自動的にテスト対象クラスのインスタンスを作り、モックされた依存を注入してくれる。ただし、「どのコンストラクタを使うか」「依存がモックとして用意されていない変数があれば null になる可能性がある」などの制約がある
-
@DisplayNameGenerationと@DisplayNameがあった際、@DisplayNameが優先される -
@DisplayNameGenerationの例👇- ReplaceUnderscores:アンダースコアをスペースに変換:test_name → test name - Standard:デフォルト(メソッド名そのまま):testMethod() → testMethod() - Simple:メソッド名のみ()なし:testMEthod() → testMethod - IndicativeSentence:クラス名とメソッド名を組み合わせ:getCouponsList, クーポンリスト取得
💡参考記事