2009-05-13 4 views
2

コミットされていないTransactionScopeを使用するDatabaseTestFixtureクラスを使用してSQL Server 2000データベースに対していくつかの単体テストが実行されているため、すべての変更がロールバックされます。テストは問題なくローカルデータベースに対して実行されました。なぜTransactionScopeとMSDTCを使用してVSデータベースユニットテストが失敗しますか?

次に、共通のデータベースサーバーで単体テストを指し、単体テストを実行しているマシンでMSDTCをセットアップし、すべてがそのマシンで正常に動作しています。

ユニットテストを同じ共通データベースに対しても実行する新しいマシンをセットアップしました。ユニットテストは、このマシン上で実行していない、我々は次のエラーを取得する:

System.Transactions.TransactionException : The transaction has already been implicitly or explicitly committed or aborted.

MSDTCの設定我々は、画面によって画面を比較し、働いているものとまったく同じです。

誰もこれまでにこのような経験がありますか?それを引き起こしている可能性について手がかりを探すかもし​​れないところに何か指摘していますか?

Windowsのバージョンとサービスパック、ファイアウォールオプション、msdtcオプション、VSバージョン、およびサービスパックを確認しました。

答えて

3

これは、NUnitの2.5に関連しているようです。 はその前に、次のコードがうまく働い:2.5で

[SetUp] 
public void SetUp() { 
    this._testDataContext = new DataContext(); 
    this._transactionScope = new TransactionScope(); 
} 

[TearDown] 
public void TearDown() { 
    if (_transactionScope != null) 
    { 
     this._transactionScope.Dispose(); 
    } 
    if (_testDataContext != null) 
    { 
     _testDataContext.Dispose(); 
    } 
} 

をトランザクションスコープがTransactionScopeOption.RequiresNewでインスタンス化する必要があります。私はそれが正しく配置されていないか、またはテストが実行されているときにNUnitがいくつかのアンビエントトランザクションを実行していると仮定します。

this._transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew); 

にセットアップ方法の2行目を変更し 、それが正常に動作するはずです。

なぜこのようなことが起こったのか、誰かがより良い説明をしてくれたら、私はそれを聞いてみたいです。

+0

これに感謝します。私は全く同じ問題を抱えていて、何が間違っていたのか理解できませんでした。この単純な修正は、私のためにそれを修正しました。 – Somedeveloper

1

この問題はおそらくあなたが使用しているNunitのバージョンに関連しています。ユニット2.5を実行しているときと全く同じ問題がありましたが、ユニットテストをnunit 2.4.8または2.2で実行すると、この問題は不思議に見えなくなります。

これを試してみてください

よろしく

MAC

+0

私は現在、nunit 2.2.8を使用していますが、それが役立つかどうかを確認するために再インストールを試みることがあります。もしそうなら、私はあなたにポイントを与えるでしょう! :-) – jryan

+0

私はちょうどチェックした、これは確かに状況です。 2.4.8-net-2.0で動作するいくつかのテストがありますが、2.5.0-net-2.0に移動するとトランザクションが失敗して失敗しました。 –

関連する問題