Seasar DI Container with AOP

リファレンス

S2Unitを使ったテストクラスの作成方法

テストクラスは、org.seasar.extension.unit.S2TestCaseを継承して作成します。またS2TestCaseはJUnitを拡張したクラスなので、テストメソッド等の使用方法はJUnitと同様です。

S2Unitの機能

S2Containerを使った開発のテストを簡単に行えるように以下の機能があります。

・S2Containerの自動生成
S2Containerを生成する場合、テストメソッド(testXxx)ごとに自動的にS2Containerを作成します。
S2ContainerFactory.create(PATH)と記述してS2Containerを生成する必要がありません。
・register(),getComponent(),include()メソッド
S2Containerに対するregister(),getComponent(),include()メソッドが用意されています。
・include時のPATHの省略
include()するPATHがテストクラスと同じパッケージにある場合は、パッケージ部分のパスは省略できます。
例えばaaa.bbb.CccTestクラスがaaa/bbb/hoge.diconをinclude()する場合、include("hoge.dicon")と記述することができます。
・変数の自動セット
TestCaseのstaticでなくfinalでもないフィールドが存在し、その名前からアンダースコア(_)を除いた名前のコンポーネントがコンテナに存在すれば自動的にセットされます。
TestCaseのフィールドにインターフェースの変数が定義されていればS2Containerから取り出して自動的にセットされます。テストメソッドが終わると自動セットされた値は自動的にクリア(nullをセット)されます。
・setUpXxx(),tearDownXxx()メソッド
テストメソッド(testXxx)に対応するsetUpXxx(),tearDownXxx()を定義しておくと、setUp()の後、tearDown()の前に自動的に呼び出されます。
個別のテストメソッドごとの初期化・終了処理を簡単に行えるようになります。

データベースに対するテストを行うために以下の機能が用意されています。

・トランザクション制御
include("j2ee.dicon")をしておき、テストメソッド名の最後にTxをつける(testXxxTx)ことにより、テストメソッドの直前にトランザクションを開始し、テストメソッドの直後にトランザクションをロールバックするようになるので、データベースに関するテストを行った場合のクリー ンアップの処理が不要になります。
・assertEquals()メソッド
assertEquals()で予想されるDataSetの結果に対して、Map、MapのList、Bean、BeanのListと比較することができます。
・readXls()メソッド
DataSet expected = readXls("検証用.xls")のようにしてDataSetに検証用のExcelデータを読み込むことができます。
検証用のExcelデータのPATHがテストクラスと同じパッケージにある場合PATHを省略できます。
検証用のExcelデータを作成する場合はExcelファイルの作成を参照してください。
・reload()メソッド
reload(DataSet)を使い、データの中身をプライマリーキーでリロードして新しいDataSetを取得できます。更新後の予想される結果をExcelで定義しておき、以下のようにして簡単に更新のテストができます。
DataSet expected = readXls("検証用.xls");
assertEquals(expected, reload(expected);
・readXlsWriteDb(),readXlsAllReplaceDb()メソッド
readXlsWriteDb("検証用.xls")又はreadXlsAllReplaceDb("検証用.xls")のようにして検証用のExcelデータをデータベースに格納します。検証用のExcelファイルがテストクラスと同じパッケージにある場合は、パッケージのパスを省略できます。
通常、readXlsWriteDb()、readXlsAllReplaceDb()はテスト後にロールバックしてデータが元に戻るようにtestXxxTx()の最初に実行します。また、これらのメソッドはシートの定義の逆順に削除した後にデータを挿入します。
readXlsAllReplaceDb()を使う場合、外部キー制約に引っかからないように、データのないシートを用意する必要があります。
例えば、テーブルAの外部キーでテーブルBを参照している場合、テーブルAのデータしか使わない場合でも、テーブルB用にシート名だけのシートを用意する必要があります。シートの定義順は、テーブルA、テーブルBの順になります。

Excelファイルの作成

検証用のExcelファイルを作成するには、以下のように設定します。作成したExcelファイルはテストクラスと同じ場所に配置するのが一般的です。

1.シート名
テーブル名を記述します。
2.シートの1行目
カラム名を記述します。

N:1のマッピングもベースとなるシートに「カラム名_関連番号」の名前で記述します。
3.シートの2行目以降
データを記述します。

データベースから検証用のExcelファイルを作成することが出来るように以下のクラスが用意されています。

  • データベースの内容をDataSetに読み込むクラス
  • DataSetをExcelファイルに出力するクラス

データベースの内容をDataSetに読み込むクラス

クラス名
org.seasar.extension.dataset.impl.SqlReader
メソッド詳細
public void addTable(String tableName)
説明:指定されたテーブル名のすべてのデータをDataSetに読み込みます。
第1引数:取り出すデータのテーブル名を指定します。
public void addTable(String tableName, String condition)
説明:指定された条件で指定されたテーブルのデータをDataSetに読み込みます。
第1引数:取り出すデータのテーブル名を指定します。
第2引数:取り出す条件を指定します。
public void addSql(String sql, String tableName)
説明:指定されたテーブルを指定されたSelect文の条件でデータをDataSetに読み込みます。
第1引数:テーブルからデータを取り出すためのSelect文を指定します。
第2引数:取り出すデータのテーブル名を指定します。
public DataSet read()
説明:読み込んだDateSetを返します。
戻り値:addTable()メソッドまたはaddSql()メソッドで読み込んだDateSetを返します。

DataSetをExcelファイルに出力するクラス

クラス名
org.seasar.extension.dataset.impl.XlsWriter
メソッド詳細
(コンストラクタ)public XlsWriter(String path)
説明:コンストラクタでファイルのパスを指定します。
第1引数:出力するファイルパスを指定します。
public void write(DataSet dataSet)
説明:指定されたDataSetをコンストラクタで指定したファイルパスのExcelファイルに出力します。
第1引数:出力するDataSetを指定します。