TransactionScopeロールバックは、SeleniumまたはWatinで使用できますか?
質問
ASP.NETアプリケーションの自動Webテストを実行しようとしています。 Xunit.net拡張機能のAutoRollback属性を使用して、テスト中に行われたデータベースの変更を元に戻すことを望んでいました。 AutoRollbackは、TransactionScopeを使用して、テストの前にトランザクションを開始し、後でロールバックします。
トランザクション中にWebアプリケーションをヒットしようとすると、常にタイムアウトになります。これはうまくいくようです、何かアイデアはありますか?ここに私のテストがあります:
[Fact]
[AutoRollback]
public void Entity_should_be_in_list()
{
Entity e = new Entity
{
Name = "Test",
};
dataContext.Entities.InsertOnSubmit(e);
dataContext.SubmitChanges();
selenium.Open("http://localhost/MyApp");
Assert.True(selenium.IsTextPresent("Test"));
}
解決
ASP.NETアプリケーションには個別のデータベースコンテキストがあり、Xunit.netによって開始されたトランザクションに参加させたいとは考えていません。どうやら、データベースはトランザクションの開始時にいくつかのリソースをロックします。 Webアプリケーションはしばらく辛抱強く待機し、最終的にはgivesめます。
あなたの最善の策は、空のデータベースから開始し、SQLスクリプトを使用してスキーマを作成し、ルックアップテーブルに入力することです(データベースはソース管理下ですよね?)。別のアプローチは、テストを実行する前にデータベースをバックアップし、テストが終了したら復元することです。
所属していません StackOverflow