list junit annotations
このチュートリアルでは、JUnit4とJUnit5の注釈の比較とともに、JUnit注釈についてすべて説明します。
前のチュートリアルでは、JUnitテストケースを実行するさまざまな方法を学び、テストスイートを作成して実行する方法を確認しました。
このチュートリアルでは、JUnitの顕著な側面を理解します。 注釈。 JUnit 4から、アノテーションが配置され、JUnitが非常にシンプルで、より有益になり、はるかに使いやすくなりました。
注釈 は、JVMがテストクラスで定義されたメソッドのタイプを認識できるようにするJavaAPIです。頻繁に使用される「ライフサイクルコールバックアノテーション」があります。
=> JUnitを最初から学ぶには、ここにアクセスしてください。
学習内容:
JUnitアノテーション– JUnit4とJUnit5
テストの実行は、以下に示すように、ライフサイクルのさまざまな段階を経ます。
- テストを開始する前に、クラスの開始時に実行する特定のアクティビティがあります。
- テストケースが実行を開始する前に実行されるその他の特定のアクティビティ。
- テストの実行後に実行する必要がある特定のアクティビティと
- クラス内のすべてのテストの実行終了時の特定のアクティビティ。
これらのアクティビティがJavaライフサイクルの各段階で実行されることを確認するには、「」と呼ばれる特定のユーザー定義のメソッドまたは関数を配置する必要があります。 ライフサイクルコールバックメソッド 。
これらの動作 ライフサイクルコールバックメソッド 組み込みの ‘によって決定されます ライフサイクルコールバックアノテーション ' JUnitで使用されます。
例: これらのライフサイクルのコールバックメソッドとアノテーションを次の例に関連付けて、さらに簡単にしてみましょう。 コーヒーの自動販売機のテスト。
- 方法 machineReady ()マシンの電源を入れる前に、水、牛乳、コーヒー豆が利用可能かどうかを確認する必要がある場合があります。
- 別の方法 startMachine ()マシンの電源を入れ、マシンに新しい新しい紙コップを置く必要があるかもしれません。
- ‘をチェックするテストケース お湯 () ’オプション。
- ‘をチェックする別のテストケース カプチーノ () ’オプション。
- ‘をチェックする別のテストケース ExpressoCoffee () ’オプション。
- 別の方法「 throwCup ()」は、使用済みのカップをビンに入れます。
- クラスレベルのメソッド「 throwTrashandSwitchOff ()」は、オーバーフローした廃液をトレイから洗面器に投入し、機械の電源を切ります。
したがって、上記の例では、テストのライフサイクルは次のようになります。
- startMachine ()は各テストケースの前に実行されます– お湯 ()、 カプチーノ ()と ExpressoCoffee ()が実行されます。
- この各テストケースもこの方法に従います throwCup ()。
- メソッド machineReady ()と throwTrashandSwitchOff ()は、クラスに対して1回だけ実行されるクラスレベルのメソッドです。メソッド machineReady ()は、クラスが実行を開始する間に1回実行されます。メソッド throwTrashandSwitchOff ()は、すべてのテストケースの実行が完了した後に1回実行されます。
ここで、これらは単なるJavaメソッドにすぎないという疑問が生じます。
C ++ソースコードでのバイナリツリーの実装
- JVMの実行をどのように主張しますか machineReady ()クラスレベルで1回だけ throwTrashandSwitchOff ()クラス実行の最後に?
- JVMにそれをどのように知らせますか startMachine ()と throwCup ()各テストケースを実行する前と各テストケースの実行の完了後にそれぞれ実行する必要がありますか?
- どうすればJVMにメソッドを識別させることができますか お湯 ()、 カプチーノ ()と ExpressoCoffee ()テストケースを実行しますか?
回答:上記の質問に対する唯一の回答は、ライフサイクルコールバックアノテーションが必要なすべての魔法を実行することです。
(今のところ、JUnit 4でこのクラスを作成していると仮定しましょう)
ライフサイクルアノテーション– @ BeforeClass、@ AfterClass、@ Before、@ After、 そして @テスト 上記の3つの質問に対する本当の答えです。以下のポインタを読んだ後、ライフサイクルのコールバックアノテーションとそのワークフローが明確になることは間違いありません。
- メソッドに注釈を付ける machineReady ()と @BeforeClass そして、JVMは、クラスの開始時に1回実行します。
- メソッドに注釈を付ける ゴミを投げます ()と @放課後 そして、JVMは、クラスの最後に1回実行します。
- メソッドに注釈を付ける startMachine ()と @前 そして、JVMは各テストケースが実行される前にそれを実行します。
- メソッドに注釈を付ける throwCup ()と @After そして、JVMは各テストケースの実行後にそれを実行します。
- これらの各メソッドに注釈を付ける お湯 ()、 カプチーノ ()と ExpressoCoffee ()と @テスト そしてJVMは、これらが実行されるJUnitクラスのコアテストケースであることを認識しています。
すぐに見てみましょう JUnit4とJUnit5のJUnitライフサイクルコールバックアノテーション
JUNIT4アノテーション | JUNIT5アノテーション | |
---|---|---|
@RepeatedTest | 1.JUnit 5は、@ RepeatedTestアノテーションを使用したテストメソッドの特定の回数の繰り返し実行をサポートします | |
@前 | @BeforeEach | |
@After | @AfterEach | |
@BeforeClass | @BeforeAll | |
@放課後 | @結局 | |
@テスト | @テスト |
ライフサイクルアノテーションのシーケンシャルワークフロー
以下に示すのは、JUnit4のライフサイクルアノテーションの順次ワークフローです。
- @BeforeClassアノテーションが付けられたメソッドは、クラスの開始時に1回実行されます。
- @Beforeアノテーションが付けられたメソッドは、テストケース1が始まる前に実行されます。
- @Testアノテーションが付けられたメソッドTestcase1は、クラスのテストケースです。
- @Afterアノテーションが付けられたメソッドは、テストケース1の実行が完了した後に実行されます。
- @Beforeアノテーションが付けられたメソッドは、テストケース2が始まる前に実行されます。
- @Testアノテーションが付けられたメソッドTestcase2は、クラスのテストケースです。
- @Afterアノテーションが付けられたメソッドは、テストケース2の実行が完了した後に実行されます。
- @AfterClassアノテーションが付けられたメソッドは、テストケース1と2の両方が実行された後、クラスの最後に1回実行されます。
JUnit5のライフサイクルアノテーションの順次ワークフローは次のとおりです。
- @BeforeAllアノテーションが付けられたメソッドは、クラスの開始時に1回実行されます。
- @BeforeEachアノテーションが付けられたメソッドは、テストケース1が始まる前に実行されます。
- @Testアノテーションが付けられたメソッドTestcase1は、クラスのテストケースです。
- @AfterEachアノテーションが付けられたメソッドは、テストケース1の実行が完了した後に実行されます。
- @BeforeEachアノテーションが付けられたメソッドは、テストケース2が始まる前に実行されます。
- @Testアノテーションが付けられたメソッドTestcase2は、クラスのテストケースです。
- @AfterEachアノテーションが付けられたメソッドは、テストケース2の実行が完了した後に実行されます。
- @AfterAllアノテーションが付けられたメソッドは、テストケース1と2の両方が実行された後、クラスの最後に1回実行されます。
各注釈の詳細
このセクションでは、深く掘り下げて、各ライフサイクルがアノテーションをコールバックすることを詳しく理解しましょう。
@Before(JUnit 4)/ @BeforeEach(JUnit 5):
- 注釈付きメソッドは、テストクラスの各テストメソッドの実行前に実行されます。
- このアノテーションは、各テストの開始直前にリソースまたはテストデータを設定する場合に使用できます。
- 例えば、 JUnitテストクラスに5つのテストケースがある場合、@ Before / @ BeforeEachアノテーションが付けられたメソッドは、各テストケースの実行の前に5回実行されます。
@After(JUnit 4)/ @AfterEach(JUnit 5):
- 注釈付きメソッドは、テストクラスの各テストメソッドが実行された後に実行されます。
- このアノテーションは、各テストケースの実行後に使用済みリソースまたはテストデータを解放する必要がある場合に使用できます。
- 例えば、 JUnitテストクラスに5つのテストケースがある場合、@ After / @ AfterEachアノテーションが付けられたメソッドは、テストケースの実行後に5回実行されます。
@BeforeClass(JUnit 4)/ @BeforeAll(JUnit 5):
- 注釈付きメソッドは、テストクラス内のすべてのテストメソッドが実行される前に実行されます。
- このアノテーションは、クラスレベルでリソースまたはテストデータを設定する場合に使用できます。
- このメソッドには@BeforeClass / @ BeforeAllアノテーションが付けられているため、テストクラスに対して1回だけ実行され、メソッドのコピーがクラス全体で共有されます。メソッドを指定する必要があります。 静的。
- 例えば、 JUnitテストクラスに5つのテストケースがある場合、@ BeforeClass / @ BeforeAllアノテーションが付けられたメソッドは、テストケースが開始される前に、テストクラスごとに1回実行されます。
@AfterClass(JUnit 4)/ @AfterAll(JUnit 5):
- 注釈付きメソッドは、テストクラス内のすべてのテストメソッドが実行された後に実行されます。
- このアノテーションは、使用済みのリソースまたはテストデータをクラスレベルで解放する場合に使用できます。
- このメソッドには@AfterClass / @ AfterAllアノテーションが付けられており、テストクラスに対して1回だけ実行され、メソッドのコピーがクラス全体で共有されるため、メソッドを記述する必要があります。 静的。
- 例えば、 JUnitテストクラスに5つのテストケースがある場合、@ AfterClass / @ AfterAllアノテーションが付けられたメソッドは、すべてのテストケースの実行が完了した後、テストクラスごとに1回実行されます。
@Test(JUnit 4&JUnit 5):
- @Testアノテーションは、JUnit4とJUnit5に共通です。アノテーション付きのメソッドは、クラス内のテストケースを表します。
- JUnitクラスには、それぞれ@Testアノテーションが付けられた複数のメソッドが存在する可能性があります。これは、クラスに複数のテストケースがある可能性があることを意味します。
- 渡すことができるテストには、さまざまな属性またはパラメーターがあります。テストケースの強制タイムアウトを追加したり、例外を追加したりできます。これについては、別のチュートリアルで詳しく説明します。
- アノテーション付きメソッドはプライベートまたは静的にすることはできず、値を返すことはできません。
- @TestメソッドはJUnit4でパブリックとして宣言する必要がありますが、JUnit 5では、デフォルトで「アクセス修飾子なし」が「パブリック」と見なされるため、アクセス修飾子「パブリック」なしで定義されたテストケースが許可されます。
基本的なJUNITテスト例
基本的な JUNIT 4 アノテーションの例@ BeforeClass、@ Before、@ Test、@ After、および@AfterClassは、「テストフィクスチャ」に関する以前のチュートリアルでの説明とともにコードを通じて示されました。
基本を見てみましょう JUnit 5 ライフサイクルコールバックアノテーション@ BeforeAll、@ BeforeEach、@ Test、@ AfterEach、および@AfterAllの動作を示すプログラム。
JUnit5Program.javaのコード:
public class JUnit5Program { @BeforeAll public static void preClass() { System.out.println('@BeforeAll – the annotated method runs once before all other methods execute'); } @BeforeEach public void setUp() { System.out.println('_______________________________________________________
'); System.out.println('@BeforeEach – the annotated method executes before each test '); } @Test public void test_JUnit1() { System.out.println('@Test – this is test case 1'); } @Test public void test_JUnit2() { System.out.println('@Test – this is test case 2'); } @Test public void test_JUnit3() { System.out.println('@Test – this is test case 3'); } @AfterEach public void tearDown() { System.out.println('@AfterEach – the annotated method executes after each test executes'); System.out.println('_______________________________________________________
'); } @AfterAll public static void postClass() { System.out.println('@AfterAll – the annotated method runs once after all other methods execute'); } }
クラスファイルを実行すると、以下の結果がコンソールウィンドウに表示されます。
追加の注釈– JUnit4とJUnit5
特定の目的に使用される多くの追加の注釈があります。 JUnit4とJUnit5の注釈のリストと、それが役立つ目的を簡単に説明します。
今後のチュートリアルでは、これらの注釈のそれぞれに関する詳細なチュートリアルがあります。
JUNIT4アノテーション | JUNIT5アノテーション | 簡単な説明 |
---|---|---|
@FixMethodOrder | @ TestMethodOrder&@ Order | 1.これらのアノテーションにより、ユーザーはテストクラス内のメソッドの実行順序を選択できます。 |
@ Rule&@ ClassRule | @ExtendWith | 1. @Rule –アノテーションは、テストケースに特定のルールを適用するのに役立つクラスTestRuleから拡張されています。 2.例:テストケースの実行前に一時フォルダーを作成し、実行後にフォルダーを削除することは、ルールを介して設定できます。 3. @Ruleは、JUnit 5Vintageで使用できるJUnit4でのみ使用できますが、@ ExtendWithはJUnit5により近い機能を提供します。 4.同様に、グローバルタイムアウトは@Ruleを使用して設定できます。 |
NA | @TestFactory | 1.このアノテーションはJUnit5でのみサポートされており、動的テストまたはランタイムテストの作成に役立ちます。 2.データのストリームをコレクションとして返し、ライフサイクルコールバックアノテーションを使用できません |
NA | @Nested | 1.このアノテーションはJUnitJupiterでのみサポートされています 2.ネストされたテストケースを作成するのに役立ちます。 3.たとえば、テストケース1のクラス1には、テストケース2の@Nestedクラス2がある場合があります。これにより、テストケース2はテストケース1にネストされたテストケースになります。したがって、テストケース1が実行され、次にテストケース2が実行されます。 4. @Nestedアノテーションが使用されていない場合、ネストされたクラスは実行されません。 |
@カテゴリー | @鬼ごっこ | 1.この注釈は、テストのタグ付けとフィルタリングに役立ちます 2.実行用のテストを含めるか、それらが分類されるカテゴリに基づいてフィルタリングすることで除外することができます。 |
@RunWith(Parameterized.class) @ Parameterized.Parameters | @ParameterizedTestおよび@ValueSource | 1.このアノテーションは、テストデータのバリエーションを含むメソッドを複数回実行するために使用されます。 2.JUnit 4は@RunWithと@Parametersをサポートし、JUnit 5Jupiterは@ValueSourceで@ParameterizedTestをサポートします |
@表示名 | 1.表示目的で、テストメソッドまたはクラスにユーザー定義の名前を付けることができます。 | |
@TestInstance(LifeCycle.PER_CLASS)および@TestInstance(LifeCycle.PER_METHOD) | 1. JUnit 5は、テストのライフサイクルの構成をサポートします。 2. JUnit 4と5はどちらも、メソッドごとのライフサイクルコールバックのデフォルトに従いますが、クラスごとの構成も実行できます。 |
結論
- ライフサイクルのコールバックアノテーションと、アノテーションに基づいてテストメソッドが実行されるシーケンシャルワークフローについて学習しました。
- JUnit4で使用されるアノテーションとJUnit5で使用されるアノテーションを学習しました。
- また、JUnit4がサポートする追加のアノテーションとJUnit5のみをサポートするアノテーションについても学びました。
=> ここで簡単なJUnitトレーニングシリーズに注意してください。