2011-02-04 10 views
5

테스트를 시작한 후에 생성 된 테스트 데이터베이스의 테이블에서 모든 행을 삭제하기 위해 이러한 특성이있는 메서드를 사용하는 일련의 MSTest 테스트 사례가 있습니다. 가끔씩 DB에있는 단위 테스트 중 하나의 행이 나옵니다.[ClassCleanup] 및 [TestCleanup]이 실행되지 않는 상황

테스트 시작 시간을 저장하고 있으며 그보다 최근의 타임 스탬프가있는 모든 레코드를 삭제할 것이므로 클린업 코드가 호출되지 않은 경우 살아남은 레코드 만 볼 수있는 유일한 방법입니다.

+0

NUnit, MSTest 또는 다른 테스트 프레임 워크를 말하고 있습니까? – adamjford

답변

4

글쎄, 먼저, "단위 테스트"는 기술적으로 DB를 건드려서는 안됩니다. 그러나, 나는 또한 내 통합 테스트를 위해 NUnit을 사용한다.

정리 방법이 전체적으로 실행되지 않는 유일한 상황은 정리 기능에 오류가 있거나 예외로 인해 런타임이 종료 된 경우입니다. 내가 아는 유일한 것들은 스택 오버 플로우와 메모리 부족 오류이다. 디버거에서 테스트를 중단하면 정리 단계를 건너 뜁니다.

더 많은 설명은 데이터 액세스 계층에 따라 DB 연결이 끊어지고 정리 기능이 새 기능을 얻을 수 없다는 것입니다. 이는 일반적으로 DAL을보다 강력하게 만들 필요성을 나타내며, DAL이 고장 나게하기 위해 테스트에서 예상치 못한 일이 일어나고 있음을 나타냅니다.

+0

적어도 이들 중 일부는 엄격한 단위 테스트보다 더 많은 통합이라고 생각합니다. 단지 프로젝트를 상속 받았을 때 나는 이전의 개발자들이 한 일에 대한 느낌을 얻기 위해 여전히 노력하고있다. 저는 항상 순수 주의자들이 시험에서 무엇을해야하는지 /하지 말아야하는지에 대해 생각했습니다. 특히 자동화 된 다른 테스트를 실행하기위한 동등한 병렬 툴 세트가 없기 때문에 더욱 그렇습니다. DB가 로컬 호스트에서 실행 중이므로 연결을 잃어 버릴 수도 있습니다. –

+0

다양한 수준의 테스트에 대한 "바보 같은"규칙은 작업 문화에 달려 있습니다. 가장 큰 차이점은 단위 테스트가 매우 빠르기 때문에 CI 서버를 사용할 때 모든 체크 인에서 실행될 수 있다는 것입니다. 나는 몇 시간이 걸리는 통합 테스트 스위트를 보았으며, 어떤 경우 든 평소에 테스트 스위트를 자주 사용하지 않습니다. – KeithS

1

테스트를 디버깅하고 테스트 실행이 완료되기 전에 디버거를 중지하면이 호출되지 않습니다.

관련 문제