読者です 読者をやめる 読者になる 読者になる

JUnit4のアノテーション


今更ながら、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回実行されます。