[seasar-dotnet:2160] S2Unit.NETを利用したテスト実行時にデータベースコネクションが正しくクローズされていない

Masayuki TAMADA [E-MAIL ADDRESS DELETED]
2012年 6月 7日 (木) 12:19:21 JST


タマダです。

現在、過去に.NET Framework 2.0 環境で作成したプログラムを .NET Framework 4.0 環境で
動作させるための調査を行っています。

動作環境は以下の通りです。

【.NET Framework 2.0 環境】
・S2Container.NET 1.3.17
・ODP.NET 10.2

【.NET Framework 4.0 環境】
・S2Container.NET 1.4 RC2
・ODP.NET 11.2

S2Unit.NETを利用してテスト作成してあるため、動作確認はこれを利用して実施しています。
S2Dao.NETを利用したテストプロジェクトの動作確認中にデータベースコネクションが開けなく現象が
発生してしまいました。

但し、個々のTestFixtureを実行させた場合、この現象は発生しません。
このプロジェクトでは、多数のTestCase, TestFixtureが存在しています。
そのため、CONTAINERNET-146 の問題と同様かと考えて調査をおこなってみました。

Revision 1260 でコミットされた S2TestCaseRunnerBase.cs
にはコードの変更が行われていませんが(ここの意図は理解出来ませんが)、
QuillTestCaseRunner.cs の変更内容を見ると、TearDownDataSourceメソッド内で
_transactionContext が存在有無により
_transactionContext が保持しているデータベースコネクションのクローズ処理を行う様にされています。

しかし、これと同様の処理がS2TestCaseRunnerに存在しないのが気になり、S2TestCaseRunnerBase の
TearDownDataSourceメソッドの
挙動を確認してみました。
結論だけ書くと、TearDownDataSourceメソッド終了時、_transactionContext.Connection はオープンしたままであるため、
上記の場合問題が発生している様です。

そこで、QuillTestCaseRunnerと同様にS2TestCaseRunner に
TearDownDataSourceメソッドを以下の様に追加し、再度テストを行い、
TearDownDataSourceメソッド終了時、_transactionContext.Connection
はクローズされ問題が発生しないことを確認しました。

    protected override void TearDownDataSource(object fixtureInstance)
    {
        if (_dataSource != null && _transactionContext != null)
        {
            _dataSource.CloseConnection(_transactionContext.Connection);
        }
        base.TearDownDataSource(fixtureInstance);
    }

この点について確認頂けると有り難いです。


seasar-dotnet メーリングリストの案内