JUnit5で変更・追加された機能

JUnit5で変更・追加された機能

JUnit4になってから約10年でメジャーバージョンアップしました。

違いを調査しました。

前提

言語 バージョン
Java 8以上

クラスアノテーションの変更

JUnit5からテストクラスにつけるアノテーションは@ExtendWith(SpringExtension.class)アノテーションを使用します。

@ExtendWith(SpringExtension.class)
public class{
  public 何かのテスト() {
    // テスト
  }
}

@SpringJUnitConfig(classes = AppConfig.class)は以下と同じです。

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppConfig.class)

TCF機能でDIする

テストクラスに以下のアノテーションをつけることにより、依存関係にあるクラスに対してDIすることができます。

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppConfig.class)

src/main/javaのどこかにAppConfig.javaを配置します。クラス名はAppConfigじゃなくてもOKです。ここではAppConfig.javaとしています。

AppConfig.java

package com.example.demo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example.demo.primary.repository")
public class AppConfig {}

No need for public modifier

@ExtendWith(SpringExtension.class)
public class AaaTest{
  public 何かのテスト() {
    // テスト
  }
}

というように記述していましたが、クラスもメソッドもpublic修飾子が不要になります。

class AaaTest{
  何かのテスト() {
    // テスト
  }
}

並行テストができる

JUnit5からパラレルにテストを実行することができます。これにより格段にテスト実行が早くなります。非常に強力な機能だと思います。

junit-platform.propertiesファイルをクラスパスルートに配置し、中身を以下の通りにします。

srt/test/resources/junit-platform.properties

junit.jupiter.execution.parallel.enabled=true # 並行実行を有効
junit.jupiter.execution.parallel.mode.default=concurrent #デフォルトを同時実行(不要な気がする)

具体的には、src/test/resources配下にjunit-platform.propertiesを配置します。

@TestMethodOrderアノテーションでテスト実行順序指定

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)をクラスにつけると各@Testの実行順を指定することができます。

各テストメソッドに@Order(org.junit.jupiter.api.Test)アノテーションを付与します。

引数に数値を指定し、その指定順にテストは実行されます。

package jp.co.confrage;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@DataJpaTest
class LinkedserviceMansionServiceMstRepositoryTest {
  @BeforeAll
  static void initAll() {}

  @BeforeEach
  void beforeEach() {}

  @AfterEach
  void tearDown() {}

  @AfterAll
  static void tearDownAll() {}

  @Test
  @Order(1)
  @DisplayName("test case-1")
  void successTest() {
    // ~
  }

  @Test
  @Order(2)
  @DisplayName("test case-2")
  void failureTest() {
    // ~
  }
}

JUnit5で廃止されたアノテーション

以下廃止になりました。

JUnit5で廃止されたアノテーション
@RunWith(Enclosed.class)
@RunWith(Theories.class)

前処理/後処理

テストする前に前処理/後処理をしますが、JUnit4の時とアノテーションが変わっています。

処理 意味 mocha
@BeforeAll テスト前に1度だけ実行されるstaticメソッド @Before
@BeforeEach 各テストメソッドの初期処理として1度だけ実行される @BeforeEach
@AfterAll テスト前に1度だけ実行されるstaticメソッド @After
@AfterEach 各テストメソッドの初期処理として1度だけ実行される @AfterEach

テストをスキップする

JUnit5ではorg.junit.jupiter.api.Disabledアノテーションを使用して、クラスレベルでテストのスキップやメソッドレベルでのテストのスキップをすることが可能です。

@Disabledアノテーションを付与するだけです。

コメント

タイトルとURLをコピーしました