今更ながら、JUnt4のアノテーションについてのまとめ
org.junitパッケージのアノテーション
@Test | テストメソッド用のアノテーション |
@Before | JUnit3 の setup() に相当。各テストメソッドの実行前に実行される |
@After | JUnit3 の tearDown() に相当。各テストメソッドの実行後に実行される |
@BeforeClass | テストクラスの実行前に一度だけ実行される |
@AfterClass | テストクラスの実行後に一度だけ実行される |
@Ignore | 該当のテストメソッドをスキップする。コメントを付与することもできる |
例外のテスト
以下の例では、NumberFormatExceptionが発生することをテストしている。
@Test(expected=NumberFormatException.class) public void test() { Integer.parseInt("ONE"); }
タイムアウト付きのテスト
以下の例ではメソッドの実行が0.1秒以上かかるとテストに失敗となる。
@Test(timeout=100) public void test() throws Exception { Thread.sleep(150); }
テストの無効化
@Ignore("not ready yet") @Test public void test() throws Exception { fail(); }
クラス全体にもつけられる。
@Ignore public class IgnoreMe { @Test public void test1() { ... } @Test public void test2() { ... } }
org.junit.runnerとorg.junit.runnersパッケージのアノテーション
@RunWith | テストランナを指定する |
@SuiteClasses | テストスイートクラスを指定する |
@Parameters | パラメータを生成するメソッドを指定する |
テストスイートの指定
TargetTest1とTargetTest2を一括で実行。
@RunWith(Suite.class) @SuiteClasses( { TargetTest1.class, TargetTest2.class}) public class AllTests { }
パラメータ指定のテスト
@RunWith(Parameterized.class) public class TargetTest1 { private int num; private String expected; public TargetTest1(int num, String expected) { this.num = num; this.expected = expected; } @Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{{20, "20"},{100, "100"}}); } @Test public void test() throws Exception { assertEquals(expected, Integer.toString(num)); } }
@Parametersアノテーションを付けたCollectionを返すスタティックメソッドを用意すると、テストメソッドの前にコンストラクタ経由で値を設定してくれる。上記の例では、numに20,expectedに"20"が設定されたテストと、numに100,expectedに"100"が設定されたテストが、計2回実行されます。