JUnit4 ことはじめ.

Think Different. – A dream does not escape. but I always escapes.

ずっと食わず嫌いだった JUnit4 を使ってみたので, コードを晒しておきます...

/*
 * $Id$ 
 */
package net.nanasess.examples;

import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

import static org.junit.Assert.*;

/**
 * HelloWorld のテスト.
 * 
 * @author Kentaro Ohkouchi
 * @version $Revision$ $Date$
 */
public class HelloWorldTest {

    private static String expected;
    private String actual;
    private static int counter;    

    /**
     * すべてのテスト前に実行するメソッド.
     * 
     * static にして {@link @beforeClass} アノテーションをつける.
     */
    @BeforeClass
    public static void beforeClass() {
        System.out.println("HelloWorld テストを始めます.");
        counter = 0;
        System.out.println("カウンターを初期化しました.");
        
    }
    
    /**
     * すべてのテストを終了した後に実行するメソッド.
     * 
     * static にして {@link @AfterClass} アノテーションをつける.
     */
    @AfterClass
    public static void afterClass() {
        System.out.println(counter + " 個のテストを実行しました.");
        System.out.println("HelloWorld テストを終了します.");
    }
    
    /**
     * 各テストをする前に実行するメソッド.
     * 
     * {@link @Before} アノテーションをつける.
     */
    @Before
    public void before(){
        expected = "HelloWorld";
        System.out.println("expected を初期化しました.");
    }
    
    /**
     * 各テストの後に実行するメソッド.
     * 
     * {@link @After} アノテーションをつける. 
     */
    @After
    public void after() {
        counter++;
        System.out.println(String.valueOf(counter) + " 番目のテストを実行しました.");
    }

    /**
     * HelloWorld のテスト.
     */
    @Test
    public void helloWorld() {
        actual = "HelloWorld";
        assertEquals(expected, actual);
    }

    /**
     * ちゃんと ClassNotFoundException になるかどうかのテスト.
     * 
     * @throws Exception エラーが発生した場合.
     */
    @Test(expected = ClassNotFoundException.class)
    public void classForNameFailure() throws Exception {
        Class.forName("org.postgresql.Driver");
    }

    /**
     * スタブなので, スキップするテスト.
     * 
     * {@link @Ignore} アノテーションをつけると, そのメソッドはテストしない.
     */
    @Ignore("スタブなのでテストしません...")
    @Test
    public void testStub() {
        assertEquals("test", "stub");
    }

    /**
     * 配列を比較するテスト.
     * 
     * {@link org.junit.Assert#assertArrayEquals(String[], String[])} を使ってます.
     * 配列や, List のテストも楽になったものです(しみじみ)
     */
    @Test
    public void arrays() {
        String[] expecteds = { "1", "2", "3" };
        List<String> actuals = new ArrayList<String>();
        actuals.add("1");
        actuals.add("2");
        actuals.add("3");

        assertArrayEquals(expecteds, actuals.toArray(new String[actuals.size()]));
    }
}

個人的には, 配列や例外のテストが解りやすく楽になったのが良い感じ.
JUnit4 の関連ライブラリも充実してきたので, そろそろ乗り替え時かな...

ついでに, Eclipse 3.4M6a を Celeron 600MHz, メモリ 384MB という非力なノートPCで使ってみましたが, 思ったよりサクサクで良い感じでした☆