2009-06-16 17 views
6

私は自分のASP.NETアプリケーションの自動Webテストをやろうとしています。私は、Xunit.net拡張機能のAutoRollback属性を使用して、テスト中に行われたデータベースの変更を取り消すことを望んでいました。 AutoRollbackは、TransactionScopeを使用してテストの前にトランザクションを開始し、その後にロールバックします。TransactionScopeロールバックをSeleniumまたはWatinで使用できますか?

トランザクション中に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")); 
} 

答えて

5

ASP.NETアプリケーションには別のデータベースコンテキストがあり、Xunit.netによって開始されたトランザクションに参加することは考えられません。明らかに、トランザクションが開始されると、データベースはいくつかのリソースをロックします。 Webアプリケーションはしばらく忍耐強く待ってから、やがて諦めます。

空のデータベースから始まり、SQLスクリプトを使用してスキーマを作成し、ルックアップテーブルを作成することをお勧めします(データベースはunder source control、右ですか?)。もう1つのアプローチは、テストを実行する前にデータベースをバックアップし、完了したら復元します。

+0

あなたはそれを言ったのでとても分かりました。私はいつもデータベースを構築して壊すのを避けたいと思っていましたが、私はそれに固執していると思います。 –

+0

既存のトランザクションスコープに参加できるように、LINQ to SQLでトランザクションサポートを有効にする方法を見つける必要があります。 –

関連する問題