3

xUnit.netとxunit拡張機能によって提供されるAutoRollback属性を使用してテストケースを作成しようとしています。

私のテストケースはこのようになります

[Fact, AutoRollback]<br>
public void TestCase()<br>
{

    // insert into data table
    repository.Insert(data);

    // spawn a new thread and read data which you just inserted in the data table
    Task.Factory.StartNew(action_to_read_data);
}

このテストケースは失敗し、新しいスレッドのデータの読み取り中に接続タイムアウト例外をスローします。私が見つけた問題は、テストケースがAutoRollback属性のためにトランザクションを開始し、データを挿入している間、最後にロールバックのためにテーブルをロックすることです。テストケースによって生成された新しいスレッドは、親スレッドによってロックされているため、同じテーブルからデータを読み取ることができません。ただし、同じスレッドでデータを読み取ることができます。

誰かが解決策を持っていますか?上に挿入したデータを読み取る複数のスレッドを実行したい。

4

1 に答える 1

1

私がこれまでに見つけたのは、AutoRollback機能を使用している間は、単体テストで同じデータベースと対話する別のスレッドを使用できないということです。その属性をテストケースから削除し、テストケースによって挿入されたすべてのオブジェクトを自分で追跡することになりました。

于 2011-05-18T07:28:25.273 に答える