스프링 ApplicationContext
과 데이터베이스가 필요한 테스트를 작성하면 단위 테스트가 아닌 통합 테스트입니다. 단위 테스트에 대한 일반적인 규칙은 다음과 같습니다
- 그들은
- 그들은 데이터베이스에 린 설정 테스트 데이터 (즉, 어떤로드가 (/ 콩 눈살을 찌푸리게 즉, 방법은 다른 클래스 호출) 한 가지를 테스트 반면에 어떤 거래, 아니 거대한 응용 프로그램 컨텍스트)
통합 테스트 :
- 는 (데이터베이스에 데이터베이스 연결,로드 테스트 데이터를 생성 느리다는 큰 설치 단계는 많은 BEA 배선 없습니다
- 브리튼 (많은 의존성 때문에)
- 만약 그들이 실패하면, 그것이 실행 된 500,000 라인의 코드 어딘가에 있다는 것을 알 것입니다.
그래서 TDD의 경우 Spring을 사용하지 않고 만들 수있는 bean을 빌드하려고합니다. 당신이 Hibernate 나 데이터베이스를 시작할 필요가없는 방법으로 그것들을 작성하라. 주된 이유는 TDD가 매일 수백 번 단위 테스트를 실행해야하기 때문입니다. 10 초 이상 실행하면 결국 테스트가 끝나기를 기다리는 데 시간을 낭비하게됩니다.
다음 질문은 일반적으로이 방법으로 유용한 것을 테스트하는 방법입니다. 글쎄, 이렇게 생각 해보자. Hibernate works. 이미 많은 단위 테스트가 있습니다. 최대 절전 모드를 테스트하는 것은 시간 낭비입니다. 따라서 코드에서 Hibernate를 완전히 숨기는 레이어를 애플리케이션에 생성해야한다.
FooDao
을 배선하는 대신 byId()
메서드가있는 IFooDao
을 연결하고 POJO를 반환합니다. 단위 테스트에서는 단일 인스턴스를 반환하는 mock 구현을 만들 수 있습니다.
실제 FooDao
의 작동 여부를 알고 싶으면 byId()
번을 호출하는 통합 테스트를 작성하십시오.
하지만 "DAO에서 개체 가져 오기, 개체 처리, DAO로 다시 개체 저장"을 피하십시오. 이것들은 세 가지 별개의 테스트입니다 (IT 2 개, UT 1 개).
그래서, 예를 들어, 다른 서비스를 조종하는 컨트롤러를 테스트하는 테스트부터 시작하여 다른 서비스를 조롱 한 다음 해당 서비스를 테스트 할 새 테스트를 작성하는 등 목표를 달성하셨습니까? –
예. TDD의 가장 중요한 핵심 가치 중 하나는 "작은 단계"입니다. 테스트에서 100 줄이 넘는 코드가 실행되면 거의 "작은 단계"가 아닙니다. –