例を含むJUnit5アノテーション

JUnit 5 は次世代のJUnitです。目標は、JVMでの開発者側のテストのための最新の基盤を作成することです。これには、Java 8以降に焦点を当てるだけでなく、さまざまなスタイルのテストを有効にすることも含まれます。

MavenとGradleの両方を使用できます。

Mavenを使用している場合は、次の依存関係をpom.xmlに追加する必要があります。ファイル:




org.junit.jupiter
junit-jupiter-api
5.3.1
test


org.junit.jupiter
junit-jupiter-params
5.3.1
test


@ JUnit5アノテーション

JUnit 5では、最も明らかな変更の1つは、テストクラスとメソッドを公開する必要がなくなったことです。

それでは、最も一般的なJUnit5アノテーションのリストを見ていきましょう。


@テスト

このアノテーションは、メソッドがテストメソッドであることを示します。この注釈は属性をとらないことに注意してください。

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {

@Test
void helloJUnit5() {
assertEquals(10, 5+5);
} }

@ParameterizedTest

パラメータ化されたテストにより、異なる引数を使用してテストを複数回実行できます。通常のように宣言されます@Testメソッドを使用しますが、@ParameterizedTestを使用します代わりに注釈。

さらに、各呼び出しの引数を提供するソースを少なくとも1つ宣言してから、テストメソッドで引数を使用する必要があります。

たとえば、次の例は、@ValueSourceを使用するパラメーター化されたテストを示しています。引数のソースとして文字列配列を指定するための注釈。


例:

import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import static org.junit.jupiter.api.Assertions.assertTrue; class JUnit5Test {
@ParameterizedTest
@ValueSource(strings = { 'cali', 'bali', 'dani' })
void endsWithI(String str) {
assertTrue(str.endsWith('i'));
} }

@RepeatedTest

JUnit 5には、メソッドに@RepeatedTestのアノテーションを付けるだけで、指定された回数だけテストを繰り返すことができます。必要な繰り返しの総数を指定します。

繰り返されるテストの各呼び出しは、通常の@Testの実行のように動作します。方法。

これは、Seleniumを使用したUIテストで特に役立ちます。


import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.RepetitionInfo; import org.junit.jupiter.api.TestInfo; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {

@RepeatedTest(value = 5, name = '{displayName} {currentRepetition}/{totalRepetitions}')
@DisplayName('RepeatingTest')
void customDisplayName(RepetitionInfo repInfo, TestInfo testInfo) {
int i = 3;
System.out.println(testInfo.getDisplayName() +

'-->' + repInfo.getCurrentRepetition()
);


assertEquals(repInfo.getCurrentRepetition(), i);
} }

テストの結果からわかるように、i==3の場合、テストは合格です。それ以外の場合は失敗します。

@表示名

テストクラスとテストメソッドは、テストランナーとテストレポートによって表示されるカスタム表示名を宣言できます。

例:


import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @DisplayName('DisplayName Demo') class JUnit5Test {
@Test
@DisplayName('Custom test name')
void testWithDisplayName() {
}
@Test
@DisplayName('Print test name')
void printDisplayName(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
} }

@BeforeEach

@BeforeEachアノテーションは、JUnit4の@Beforeと同様に、アノテーション付きメソッドを各テストメソッドの前に実行する必要があることを示します。

例:

import org.junit.jupiter.api.*; class JUnit5Test {
@BeforeEach
void init(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
} }

出力:

firstTest 1 secondTest 2

@AfterEach

このアノテーションは、JUnit4の@Afterと同様に、アノテーションが付けられたメソッドを各テストメソッドの後に実行する必要があることを示します。たとえば、テストごとにプロパティをリセットする必要がある場合は、メソッドに@AfterEachアノテーションを付けることができます。そのタスクのために。


import org.junit.jupiter.api.*; class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterEach
void after(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
} }

出力:

1 firstTest 2 secondTest

@BeforeAll

このアノテーションは、すべてのテストの前にメソッドを実行します。これは、JUnit4の@BeforeClassに類似しています。 @BeforeAllアノテーションは通常、テストのさまざまなものを初期化するために使用されます。

例:

import org.junit.jupiter.api.*; class JUnit5Test {
@BeforeAll
static void init() {
System.out.println('Only run once before all tests');
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
} }

出力:

Only run once before all tests 1 2

@結局

@AfterAllアノテーションは、すべてのテストが実行された後にのみ、アノテーション付きメソッドを実行するために使用されます。これは、JUnit4の@AfterClassに類似しています。 このアノテーションを使用して、すべてのテストの終了時にすべてのプロセスを破棄または終了します。

例:

import org.junit.jupiter.api.*; class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterAll
static void after() {
System.out.println('Only run once after all tests');
} }

出力:

1 2 Only run once after all tests

@鬼ごっこ

このアノテーションを使用して、クラスレベルまたはメソッドレベルで、フィルタリングテスト用のタグを宣言できます。

@Tagアノテーションは、選択したテストでテストパックを作成する場合に役立ちます。

例:

import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @Tag('smoke') class JUnit5Test {
@Test
@Tag('login')
void validLoginTest() {
}
@Test
@Tag('search')
void searchTest() {
} }

@無効

@Disabledアノテーションは、クラスまたはメソッドレベルでテストを無効化またはスキップするために使用されます。これは、JUnit4の@Ignoreに類似しています。

クラスレベルで宣言すると、すべての@testメソッドはスキップされます。 @Disabledを使用する場合メソッドレベルでは、注釈付きメソッドのみが無効になります。

例:

@Disabledテストクラスを無効にするために使用されます:

import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @Disabled class DisabledClassDemo {
@Test
void testWillBeSkipped() {
} }

例:

@Disabledテストメソッドを無効にするために使用される注釈:

import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; class DisabledTestsDemo {
@Disabled
@Test
void testWillBeSkipped() {
}
@Test
void testWillBeExecuted() {
} }