S2Unit.NET

今日の大嵌りパート2。
S2Unit.NETでテストを楽しく簡単に
これを使って、ロックの掛かった行に対するテストを書こうと思ったのですが。

using MbUnit.Framework;
using Seasar.Extension.Unit;

namespace MyClassLibrary
{
    [TestFixture]
    public class MyLibTest : S2TestCase 
    {
        /// <summary>
        /// TestXの準備
        /// </summary>
        public void SetUpTestX()
        {
            // Excelを読み込んでテータベースに書き込み(コミット済み)
            ReadXlsWriteDb ("Books/TestData.xls");
            // ・・・と、したいが、ReadXlsWriteDb内で未設定のDataSourceをアクセスして例外発生

            // ここでテーブルを行ロックする
            // コードは省略
        }

        /// <summary>
        /// テスト後、ロールバックする
        /// </summary>
        [Test, S2(Tx.Rollback)]
        public void TestX()
        {
            // 行ロックされたデータへの操作
            // コードは省略
        }
    }
}

コード中のコメントにあるように、SetUpメソッドではS2TestCaseクラスのDataSourceプロパティが未設定のため、データベースにアクセスするメソッドが呼び出せません。テストケース内で呼ぶことを想定しているよーです。初期化の順番は、

コンテナの初期化->各テストケースのSetUpメソッド呼び出し->DataSourceの設定

となります。ソースコード読めば一発だったんですが、Seasar.NETのプロジェクトをソリューションに入れると重くなるのでDLL参照にしてました。とりあえず、

        public void SetUpTestX()
        {
            // Excelを読み込んでテータベースに書き込み(コミット済み)
            // ・・・したいが、DataSourceプロパティが未設定で例外発生
            IDataSource dataSource = GetComponent(typeof(IDataSource)) as IDataSource;
            IDataWriter writer = SqlWriterFactory.GetSqlWriter (dataSource);
            writer.Write (ReadXls ("Books/TestData.xls"));

            // ここでテーブルを行ロックする
            // コードは省略
        }

こう書いて逃げることに。