1

좋아, 단위 테스트가 아니라 엔드 투 엔드 테스트입니다. 설정이 다소 복잡합니다. 유닛 테스트는 C#, ODBC 연결을 사용합니다. 모든 단위 테스트는 자체적으로 정리를 시도하지만 매 20 회 테스트 (C# 클래스 당 한 번)로 전체 데이터베이스 복원을 수행해야합니다. 나는이 문서에 따르면, 내가 ODBC 연결을 통해 그것을 할 수 있다고 생각하지 않습니다 :SQl Server 2008에 대한 단위 테스트 작성시 치킨과 달걀 문제 (데이터베이스 복원)

http://www.sql-server-performance.com/articles/dba/Obtain_Exclusive_Access_to_Restore_SQL_Server_p1.aspx

6104 메시지, 수준 16, 상태 1, 줄 1 자신의 프로세스를 종료 KILL을 사용할 수 없습니다 .

그러나 199 개의 테스트가 잘못된 정리로 인해 어색해하지 않도록하고 싶습니다. 다른 방법이 있습니까? 아마도 COM 자동화 또는 그 종류의 것을 사용하는 것과 같은 다른 "연결"을 연 다음 거기에서 모든 데이터베이스 연결을 종료 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?

또한 클라이언트는 복원 후에 자동으로 다시 연결할 수 있습니까? 아니면 20 번 테스트마다 한 번씩 해체해야합니까?

이 질문을 혼동스럽게 생각하면 질문 사항을 알려주십시오. 감사!

+1

용어에 대한 설명 - 단원 테스트가 단 하나의 단위 만 테스트하는 것이 아니라면 단위 테스트가 아닙니다. 이 경우 유닛을 테스트하고 다른 유닛 (데이터베이스에 의존하는 코드/클래스)에 대한 의존도를 동시에 테스트하기 때문에이를 "통합 테스트"라고 부릅니다. –

답변

1

ODBC 연결을 제대로 닫을 수 있는지 확인하려면 C# 통합 테스트를 위해 ADO.NET을 직접 사용하여 풀에서 새 연결을 복원 할 수 있습니다.

전체 백업보다는 스냅 샷에서 복원하면 훨씬 빠르다는 생각이 듭니다.

+0

나는 이것에 대해 멍청한 자세이며 자세한 내용은 매우 도움이 될 것입니다. –

1

물론 ODBC 연결에서 복원 할 수 있습니다. 데이터베이스를 사용하는 다른 연결이있는 경우, 그들은 당신의 을 것

USE [tempdb]; 
RESTORE DATABASE foo FROM ...; 

: 당신은 당신이 사용 - 보내고 복원하려고하는, 데이타베이스를 경우 복원하지만 tempdb 또는 master에 컨텍스트를 변경 사소한 수 없습니다 자신의 연결이므로 제대로 닫아야합니다. 연결 풀링을 사용하는 경우 풀을 청소하십시오. SqlClientSqlConnectionClearAllPools을 사용하고 ODBC는 OdbcConnection.ReleaseObjectPool을 사용합니다. 요점은 모두 당신의 통제하에 있습니다.

그런데 왜 SqlClient가 아닌 ODBC를 사용해야합니까?

+0

나는 큰 규모의 프로젝트에 참여 했었지만, Oracle과 Sybase 연결을 지원하기 때문에 그럴 것이라고 생각합니다. 정보 주셔서 감사합니다! 큰 앱은 몇 가지 다른 프로세스로 구성되어 있으므로 테스트를 염두에 두지 않고 오래 동안 만들었 기 때문에 기존 연결의 일부를 비 정상적인 방법으로 종료하려고 할 수 있습니다. –

관련 문제