2016-09-06 7 views
0

私は統合テストを実行しています。テストを開始する前に、私はデータベースを削除し、再度作成しました。最初のテストは成功です。しかし、2番目のテストの開始時に、私は例外が発生します。実行時の統合テストでSqlExceptionがスローされる

SetUp:System.Data.SqlClient.SqlException:データベース "Test"は現在使用中であるため、削除できません。

Сode:

[TestFixture] 
class Class1 
{ 
    public SqlConnection Repository; 

    [SetUp] 
    public void LocInit() 
    { 
     Repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;"); 
     Repository.Open(); 
     Repository.Execute("USE master;"); 
     Repository.Execute("DROP DATABASE Test;"); 
     Repository.Execute("USE master; CREATE DATABASE Test;"); 
     Repository.Execute("USE Test;"); 
    } 

    [Test] 
    public void Test1() 
    { 
     using (var repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;")) 
      repository.Execute("USE Test; SELECT 10"); 
    } 

    [Test] 
    public void Test2() 
    { 
     using (var repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;")) 
      repository.Execute("USE Test; SELECT 10"); 
    } 

    [TearDown] 
    public void LocalTearDown() 
    { 
     Repository.Dispose(); 
    } 
} 

は、なぜ私はこの例外を得るのですか?

+0

これは複数の備品に適用されますか? –

+3

これで 'マスター'を見ると、生きている地獄が私を怖がらせます。 –

答えて

0

このような問題が発生する理由は、まだ殺されていない保留中の接続がいくつかあるためです。回避策の一つは、hereを説明するように、実際にDBを削除する前に、すべての接続を殺すために、次のようになります。

ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

もう一つは、左のような接続がある理由を追跡することです。 Thisスレッドは、DBへのすべての接続をリストし、適切な方法で削除する方法を示しています。

+0

これはテストデータベースです。他のユーザーはいません。保留中の接続が何であるかわかりません。 –

+0

あなたのテストのうちの1つでは、接続をアクティブのままにすることができます。あるいは、サーバーが以前の接続を終了する前にDROPが発生します。ネットワーキングが関わっているかどうかは明らかではありません。 – Yakuza

関連する問題