현재 ASP.Net MVC 응용 프로그램의 기초를 설정 중이며 어떤 종류의 단위 테스트를 작성해야하는지 조사 중입니다. 나는 사람들이 본질적으로 '여러분의 견해를 테스트하지 않고 논리가 없으며 사소하고 통합 테스트에 의해 다루어 질 것입니다'라고 말하는 곳을 여러 곳에서 보았습니다.
이것이 어떻게 받아 들여지는 지혜가되었는지 이해가되지 않습니다. 통합 테스트는 단위 테스트와 완전히 다른 목적으로 사용됩니다. 무언가를 망가 뜨리면 30 분 후에 통합 테스트가 중단 될 때 알고 싶지 않아 즉시 알고 싶습니다.
샘플 시나리오 : Customer 엔터티와 함께 표준 CRUD 앱을 처리한다고 가정합니다. 고객의 이름과 주소가 있습니다. 각 테스트 수준에서 고객 검색 로직이 이름과 주소를 올바르게 가져 왔는지 확인하고 싶습니다.
저장소를 단위 테스트하기 위해 데이터베이스에 충돌하는 통합 테스트를 작성합니다. 비즈니스 규칙을 단위 테스트하기 위해 리포지토리를 모의하고 비즈니스 규칙에 적절한 데이터를 제공하며 예상 결과가 반환되는지 확인합니다.
내가하고 싶은 일 : UI를 단위 테스트하기 위해 비즈니스 규칙을 모의하고 예상 고객 인스턴스를 설정하고 뷰를 렌더링하고 뷰에 지정된 인스턴스에 대한 적절한 값이 포함되어 있는지 확인합니다.
내가 저지른 일 : 저장소를 단위 테스트하기 위해 통합 테스트를 작성하고, 적절한 로그인을 설정하고, 데이터베이스에 필요한 데이터를 작성하고, 브라우저를 열고, 고객을 탐색하고, 결과 페이지에 적절한 것이 포함되어 있는지 확인하십시오. 내가 지정한 인스턴스의 값.
위에서 설명한 두 시나리오 간에는 중복이 있지만 테스트를 설정하고 실행하는 데 시간과 노력이 얼마나 큰 차이가 있는지 알고 있습니다.
내가 (또는 다른 개발자가)보기에서 주소 필드를 제거하면 통합 테스트가이를 발견하기를 기다리지 않습니다. 나는 매일 여러 번 얻는 단위 테스트에서 발견되고 표시됩니다.
핵심 개념을 이해하지 못한다는 느낌이 들었습니다. 누군가 MVC 뷰의 유효성에 대한 즉각적인 테스트 피드백을 원하는 것이 나쁜 이유를 설명 할 수 있습니까? (또는 나쁘지 않은 경우, 피드백을 얻는 예상 방법이 아닙니다)
"To unit-test the repository, I write an integration test"
무엇을 기다립니다? 그것은 저장소의 단위 테스트가 아닙니다. 테스트를 자동화하고 있지만 테스트중인 코드에는 여전히 DAL과 데이터베이스가 포함되어 있습니다. 저장소를 단위 테스트하려면 비즈니스 규칙과 같이 저장소를 분리하십시오.