실행 통합 테스트가 SqlException을 throw 할 때

c# dapper integration-testing nunit

문제

통합 테스트를 실행하고 있습니다. 테스트를 시작하기 전에 데이터베이스를 삭제하고 다시 작성했습니다. 첫 번째 테스트가 성공적입니다. 하지만 두 번째 테스트가 시작될 때 예외가 발생했습니다.

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();
    }
}

이 예외가 발생하는 이유는 무엇입니까?

수락 된 답변

Havent는 나 자신을 시도했지만 아마도 이것을 시도 할 수 있습니다.

연결 문자열에 Pooling = false를 설정합니다.

또는

데이터베이스를 삭제하기 전에 풀을 지우십시오. SqlConnection.ClearAllPools ()

"현재 데이터베이스가 사용 중이기 때문에 데이터베이스를 삭제할 수 없습니다." 어떻게 고치는 지?


인기 답변

이러한 문제가 발생하는 이유는 아직 죽지 않았을 수있는 보류중인 연결이 여전히 남아 있기 때문입니다. 한 가지 해결 방법은 실제로 DB를 삭제하기 전에 여기 에 설명 된대로 모든 연결을 종료하는 것입니다.

ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE

또 다른 것은 연결이 남아있는 이유를 추적하는 것입니다. 스레드는 DB에 대한 모든 연결을 나열하고 적절한 방법으로 제거하는 방법을 보여줍니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.