大量のコードのテストケースを作成したいのですが、JUnit @Rule
アノテーション機能の詳細を知りたいので、それを使用してテストケースを作成できます。簡単な例を通してその機能の詳細な説明を提供するいくつかの良い答えまたはリンクを提供してください。
@Rule
かなりよく説明していることを発見しました。特に最後のセクション「イベントのシーケンスの詳細」をチェックしてください
大量のコードのテストケースを作成したいのですが、JUnit @Rule
アノテーション機能の詳細を知りたいので、それを使用してテストケースを作成できます。簡単な例を通してその機能の詳細な説明を提供するいくつかの良い答えまたはリンクを提供してください。
@Rule
かなりよく説明していることを発見しました。特に最後のセクション「イベントのシーケンスの詳細」をチェックしてください
回答:
ルールは、テストクラス内のすべてのテストに適用される機能を追加するために使用されますが、より一般的な方法です。
たとえば、ExternalResourceはテストメソッドの前後にコードを実行します。andを使用する必要は@Before
ありません@After
。使用するExternalResource
のではなく、@Before
かつ@After
優れたコードの再利用のための機会を提供します。同じルールを2つの異なるテストクラスから使用できます。
設計は以下に基づいています:JUnitのインターセプター
詳細については、JUnit wiki:Rulesを参照してください。
JUnitルールは、AOP(アスペクト指向プログラミング)の原則に基づいて動作します。テストメソッドをインターセプトすることで、特定のテストメソッドの実行前または実行後に何らかの処理を行う機会を提供します。
以下のコードの例を見てください:
public class JunitRuleTest {
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@Test
public void testRule() throws IOException {
File newFolder = tempFolder.newFolder("Temp Folder");
assertTrue(newFolder.exists());
}
}
上記のテストメソッドが実行されるたびに、一時フォルダーが作成され、メソッドの実行後に一時フォルダーが削除されます。これは、Junitが提供する標準のルールの例です。
同様の動作は、独自のルールを作成することでも実現できます。Junitは、独自のJunitルールを作成するために実装できるTestRuleインターフェイスを提供します。
参照用の便利なリンクを次に示します。
tl; drの仕組み:JUnitはテストメソッドをStatementオブジェクトでラップし、statement.Execute()がテストを実行します。次に、JUnitは、statement.Execute()を直接呼び出してテストを実行する代わりに、@ Ruleアノテーションを使用してStatementをTestRuleに渡します。TestRuleの「適用」関数は、テストのステートメントを指定すると、新しいステートメントを返します。新しいStatementのExecute()メソッドは、テストStatementのexecuteメソッドを呼び出す(または呼び出さない、または複数回呼び出す)ことができ、前後に必要な処理を実行できます。これでJUnitには、テストを実行するだけではない新しいステートメントが追加され、最終的にExecuteを呼び出す前に、それをさらに他のルールに渡すことができます。
ルールは、一般的な方法で各テストメソッドの動作を強化するために使用されます。JUnitルールはテストメソッドをインターセプトし、テストメソッドが実行を開始する前とテストメソッドが実行された後に何かを実行できるようにします。
たとえば、@ Timeoutルールを使用して、すべてのテストのタイムアウトを設定できます。
public class TestApp {
@Rule
public Timeout globalTimeout = new Timeout(20, TimeUnit.MILLISECONDS);
......
......
}
@TemporaryFolderルールは、一時フォルダー、ファイルを作成するために使用されます。テストメソッドが実行されるたびに、一時フォルダが作成され、メソッドの実行後に削除されます。
public class TempFolderTest {
@Rule
public TemporaryFolder tempFolder= new TemporaryFolder();
@Test
public void testTempFolder() throws IOException {
File folder = tempFolder.newFolder("demos");
File file = tempFolder.newFile("Hello.txt");
assertEquals(folder.getName(), "demos");
assertEquals(file.getName(), "Hello.txt");
}
}
このリンクで、junitが提供する組み込みルールの例を確認できます。