2016-09-06 4 views
0

Я запускаю интеграционные тесты. Перед началом теста я удалил базу данных и создаю ее снова. Первый тест прошел успешно. Но в начале второго теста я получаю исключение:При выполнении тестов интеграции throw SqlException

SetUp: System.Data.SqlClient.SqlException: Невозможно удалить базу данных «Test», поскольку она используется в настоящее время.

Код:

[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 thread показывает, как вы можете перечислить все подключения к вашей БД и избавиться от нее в надлежащем порядке.

+0

Это тестовая база данных. Других пользователей нет. Я не понимаю, какие могут быть некоторые ожидающие подключения. –

+0

Хорошо, что один из ваших тестов может отключить соединение, или DROP произойдет до того, как серверу удастся завершить предыдущие подключения. Никогда не бывает очевидным, если задействована сеть. – Yakuza

Смежные вопросы