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")); // ここでテーブルを行ロックする // コードは省略 }
こう書いて逃げることに。