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
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);
} }
パラメータ化されたテストにより、異なる引数を使用してテストを複数回実行できます。通常のように宣言されます@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'));
} }
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
アノテーションは、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
このアノテーションは、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
このアノテーションは、すべてのテストの前にメソッドを実行します。これは、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() {
} }