4

Nhibernate リポジトリのテスト中に奇妙な問題が発生しました。

以下のような10個の単体テストがあります。それらをバッチで実行するたびに、最初は失敗し、残りは成功します。それらを1つずつ実行すると、すべて失敗します。テスト実行の前に MSDTC を再起動すると、以前のように動作する場合があり、すべてのテストが成功する場合があります。なぜそのように振る舞うかのパターンが見つかりません。

トランザクションをロールバックして、すべてのテストでクリーンな DB から開始するようにしたいので、トランザクションを破棄します。

次のエラーが原因で、テストが失敗しています:

System.Data.SqlClient.SqlException: サーバー 'MYCOMPUTERNAME\SQLEXPRESS' の MSDTC は使用できません。

私のテストは次のようになります。

[TestInitialize]
public void MyTestInitialize()
{
    _transactionScope = new TransactionScope();
}

[TestCleanup]
public void MyTestCleanup()
{
    if (_transactionScope != null)
    {                
        _transactionScope.Dispose();
        _transactionScope = null;
    }
}             

[TestMethod]
[TestCategory("RepositoryTests")]
public void RepositoryCanSaveAProduct()
{
    var platform = ProductObjectMother.CreatePlatform("100010", "Supplier 10");

    var mainsegment = ProductObjectMother.CreateMainSegment("123");
    var application = ProductObjectMother.CreateApplication("Foo");
    var productfamily = ProductObjectMother.CreateProductFamily("X99");

    Engine i = ProductObjectMother.CreateEngine(platform, productfamily, application, mainsegment);
    var repository = new ProductRepository();
    repository.Save(i);
    repository.Flush();
}
4

1 に答える 1

2

問題は、_transactionScope.Complete() を使用してコミットされていないか、例外をスローしてロールバックしていないトランザクションにあるようです。

また、テストにない「アサート」関数 (等しい、等しくない、存在するなど) によってテストが通常失敗するか、正常に実行されるという奇妙なことに気付きました。:)

于 2013-01-28T13:19:09.393 に答える