2009-07-10 9 views
4

리포지토리 패턴을 기반으로 도메인 모델을 개발 중이며 TDD의 일부인 모든 단위 테스트가 테스트 저장소에 적용됩니다.SQLRepository에 대해서 단위 테스트를 실행해야합니까?

내 질문은 : 언제 SQL 버전의 리포지토리에 대한 통합 테스트를 생성합니까?

내 관심사는 객체 (테스트 저장소)에서 데이터에 액세스하는 코드가 정상적으로 작동한다는 것입니다. 그러나 데이터베이스 버전 (SQL Repository)은 커버 아래에서 매우 다르므로 SQL Repository의 중요한 코드가 작동하지 않아 결국 테스트되지 않습니다. 의도 한대로 작동하는지 어떻게 확인합니까? 그 과정에 대해 뭔가 빠졌나요?

감사합니다.

답변

3

리포지토리를 조롱하는 테스트가 있어야합니다 (사용자가하는 것처럼 보임). 데이터베이스 자체는 쿼리하지 않지만 결과는 그대로 반환해야합니다. 이들은 저장소 함수를 호출하는 함수에 대한 테스트입니다.

그러나 데이터베이스 자체를 검사하고 필요한 결과를 반환하는지 검사하는 것이 유용하고 권장되는 방법입니다. 그것들은 다른 것들에 의존하지 않고 "단위 테스트"가되어야합니다. 데이터베이스가 결정된 상태에 있다는 것을 의존하지 말고, 대신 데이터베이스 초기 상태를 구축하기위한 설정을하십시오. 아마 느리게 실행될 것이고 모든 커밋 및 빌드에서 실행되지 않을 수도 있습니다 (제 말은 실행하지 마십시오). 정말로 많은 시간이 걸리는 경우).

마지막으로 통합 테스트에서 수행해야 할 모든 작업을 수행하십시오.

+1

단위 테스트는 외부 시스템에 영향을주지 않습니다. 따라서 SQLRepository에 대해 실행되는 테스트는 통합 테스트 일 것입니다. 그 너머 나는이 대답에 완전히 동의합니다. –

0

제 생각에는 테스트중인 장치가 의존하는 데이터베이스 코드가있는 즉시 실제 저장소를 사용하는 통합 테스트를 추가하십시오. 위조와 스터 빙을 사용하면 유닛 테스트가 쉬워지고 외부 종속성에 좌절하지 않고 코드의 특정 측면에 집중하고 올바르게 설정할 수 있습니다. 그러나 하루가 끝나면 스텁, 가짜 및 가짜 제품을 선적하지 않습니다. 선적 된 제품에는 모두가 함께 작동해야하는 실제 의존성과 구성 요소가 있습니다. 따라서 테스트를 실행할 때마다 응용 프로그램의 일부가 함께 작동하는지 여부를 알아야합니다. 내 응용 프로그램의 일부가 데이터베이스 변경 내용을 유지할 수없는 경우 최대한 빨리 알고 싶습니다. 따라서 외부 종속성, 즉 귀하의 데이터베이스가 코드에 일정 수준의 기능과 가치를 제공하는 수준에 있다면 통합 테스트 스위트를 추가하십시오.

실행 통합 테스트는 일반적으로 단위 테스트보다 오래 걸립니다. 따라서 CI 빌드 중 단원 테스트 만 실행하면됩니다. 그렇게하면 빌드 및 코드베이스의 상태에 대한 피드백을 더 빨리 얻을 수 있습니다. 그러나 야간 빌드에 통합 테스트를 포함시켜 코드가 실제로 어떻게 작동하는지 알 수 있어야합니다.

관련 문제