技術っぽいことを書いてみるブログ

PythonとかVue.jsとか技術的なことについて書いていきます。

いまさらながら…JUnit5についてまとめておく(アノテーション編)

背景

普段のシステム開発で使用しているJUnitですが、
感覚的に使用している感じで、しっかり理解して使えていないように感じてきましたので、
改めてまとめてみます…。

Junit5のアノテーションについて

@Test

  • テストメソッドを宣言する

@Timeout

  • @Timeout(value = 1, unit=TimeUnit.MINUTES)
  • 実行時間が長くなるテストがテスト全体の実行をとめてしまわないように保険として使うべき機能で、
    パフォーマンステストのために利用する機能ではない。

@Disabled

  • junit4では@ignoreだったもの
  • 仕様変更を一部に対して適用したが、すべてに対して変更が施されておらず、
    テストが失敗するものには@Disabledを付与して、失敗を一時的に回避させる

@BeforeEach

  • 各テストメソッドの前に実行するメソッドに付与する
  • 主にテストの前処理に使用する

@AfterEach

  • 各テストメソッドの後に実行される
  • 主にテストの後処理に使用する
    • 自動テストでは、何度実行しても同じ結果になるように前処理でテスト用に登録・更新したデータを元の状態に戻すために使用する

@BeforeAll

  • テストクラス内のすべてのテストの前に実行される
  • @TestInstance(TestInstance.Lifecycle.PER_CLASS)を付与する
    • JUNITに対して、テスト毎でなく、クラス単位でインスタンス化して、テスト実行することを教える。
    • JUnitでは@Testが付与されたメソッド毎にインスタンスを生成して、テストを実行するが、
      メソッド毎ではなく、クラス単位でインスタンスを生成してテストを実行するためにライフサイクルを変更する必要がある

@AfterAll

  • テストクラス内のすべてのテストの後に実行される
  • @TestInstance(TestInstance.Lifecycle.PER_CLASS)を付与する
    • JUNITに対して、テスト毎でなく、クラス単位でインスタンス化して、テスト実行することを教える。

@Order

  • 順番を指定する
  • クラスに@TestMethodOrder(OrderAnnotation.class)をつける
    • junitに対して、テストがOrderついていることを示してあげる

@Nested

  • インナークラスのテストクラスに付与する

@DisplayName

  • テストに適切な名前を付与する
  • メソッドにもクラスにも付与できる

@Tag

  • テストにタグをつける

@ParameterizedTest

  • パラメータ化テストであるメソッドとなる

所感

JUnit5で自動テストするなら上記のアノテーションが使えればよいかなと思います。

(他にJUnitでよく使用するアノテーションがあれば、ご教授頂ければ…と思います。)