S2JUnit4を使ってみる

惹かれた機能は

の2つ。なのでS2Unitでもよさそうなのですが、なんとなくS2JUnit4で。

で、使ってみた感想ですが、テスト開始時にテーブルの中身をテスト用データに入れ替えてテスト終了時に元に戻してくれるのは素晴らし過ぎる!
あとは期待値との比較のところなんですが、期待値だけだと片手落ちのような・・・。つまり、期待値っていうのはある条件(パラメータ)の下での期待値なのであって、条件と結果(期待値)はセットで定義したいところ。という訳で期待値用のエクセルファイルに条件も定義してしまう方法を検証してみました。

期待値はgetExpectedでDataSet(ブック)を取得し、そこからgetTableでDataTable(シート)を取得という流れになっているようなので、このDataTableをJavaBeansに変換すればOK。この変換はS2Dxoではできなかったので以下のようにしてまずはMapへと変換してみました。

public List convert(DataTable dataTable) {
    final List result = new ArrayList();
    for (int i = 0; i < dataTable.getRowSize(); i++) {
        final Map row = new HashMap();
        for (int j = 0; j < dataTable.getColumnSize(); j++) {
            row.put(dataTable.getColumnName(j), dataTable.getRow(i)
                    .getValue(j));
        }
        result.add(row);
    }
    return result;
}

一度Mapへ変換してしまえばあとはS2Dxoでお好みのJavaBeansへ変換可能。という訳で条件と結果を同じブックに定義するのは何とかなりそうです。あとはテスト用データも同じブックに定義したいところなんですが、こちらはテーブル名ではないシート名を使うことができないようなので今のところ無理みたいです。「このシートはテーブルのデータではありませんよ」的な印が付けられればいいんですが。でももしかしたら別ブックにした方が作業しやすいかも!?