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アノテーションを付与するだけです。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント