ふと、そういやJUnit4ってどうなったんだっけ?と思い出し、SourceForgeを漁ってダウンロードしてみた。で、簡単に遊んでみました。
JUnit4を使ったテストクラス
import static org.junit.Assert.assertEquals; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; public class HogeTest { private Hoge hoge; @Before public void Hogeインスタンスの生成() { hoge = new Hoge(); } @After public void 後始末() { hoge = null; System.gc(); } @Test public void 加算() { assertEquals(3, hoge.add(1, 2)); } @Test(expected=hoge.HogeException.class) public void 例外が発生すること() throws Exception { hoge.exception(); } @Test public void 配列の比較() { assertEquals(new String[] {"aaa", "bbb", "ccc"}, hoge.createArray()); } @Test @Ignore(value="テストを無視することができるらしい") public void 無視してみる() { assertEquals("aaa", "bbb"); } }
実行方法
JUnitCoreというクラスを実行するらしい。Eclipseから実行したので間違ってるかもしれないけど、多分こんな感じ。
% java org.junit.runner.JUnitCore hoge.HogeTest JUnit version 4.0 ...I Time: 0 OK (3 tests)
TestCaseを継承しなくていいらしい
TestCaseクラスを継承してなくてもJUnitCoreさんがテストを実行してくれます。TestCaseクラスを継承してなくてもstatic importを使えば、assertEqualsできます。ぐーっど。
import static org.junit.Assert.assertEquals; (途中略) public class HogeTest {
@Testアノテーション
テストメソッドは"test"からはじめなくても良いらしい。その代わり、@Testアノテーションをつける必要がありますが。個人的には、これはまー、悪くはないかなって程度の印象。
@Test public void 加算() { assertEquals(3, hoge.add(1, 2)); }
でも、@Testアノテーションで例外のテストができるのは素晴らしい。シンプル!
@Test(expected=hoge.HogeException.class) public void 例外が発生すること() throws Exception { hoge.exception(); }
@Beforeアノテーションと@Afterアノテーション
setUp()とtearDown()の代わりに@Beforeアノテーションと@Afterアノテーションが使える。
@Before public void Hogeインスタンスの生成() { hoge = new Hoge(); } @After public void 後始末() { hoge = null; System.gc(); }
ちなみにこいつらは複数個指定することができて面白い。
@Before public void hoge1() {...} @Before public void hoge2() {...} @Before public void hoge3() {...}
@BeforeClassアノテーションと@AfterClassアノテーション
何気にこいつが一番うれしい。クラスレベルのsetUp()とtearDown()みたいなものです。従来のsetUp()とtearDown()だと、テストメソッドの前後に実行されるので、毎回やる必要のない処理もあったりして辛いことも。@BeforeClassアノテーションを使えば、一度しかやんなくて良い処理を自然に記述できそうで嬉しい。で、上に記述しているテストクラスに以下のコードを追加して実行してみました。
@BeforeClass public static void クラスレベルの初期化() { System.out.println("クラスの初期化"); } @AfterClass public static void クラスレベルの後始末() { System.out.println("クラスの後始末"); }
実行結果は以下の通り。
JUnit version 4.0 クラスの初期化 ...Iクラスの後始末 Time: 0 OK (3 tests)
@Ignoreアノテーション
@Ignoreをつけると、そのテストは無視されるらしい。JUnitCoreを実行したコンソール上には"I"という文字が表示されました。未実装だけど、忘れないようにテストは書いておきたいって場合に便利かな。
@Test @Ignore(value="テストを無視することができるらしい") public void 無視してみる() { assertEquals("aaa", "bbb"); }
配列の比較
assertEqualsが配列の中身まで比較してくれるようになりました。いい事だ。
@Test public void 配列の比較() { assertEquals(new String[] {"aaa", "bbb", "ccc"}, hoge.createArray()); }
感想
Eclipseでグリーンバーやレッドバーを出してくれるプラグイン、ほしいな〜。コンソールは何だか味気ない。