2013-09-04 1 views
5

순수한 TDD 방식으로 봄용 웹 애플리케이션 (최대 절전 모드)을 만드는 방법에 대한 조언을 찾고 있습니다. 먼저 실패한 단위 테스트없이 생산 코드를 작성하면 안된다는 의미입니다.어떻게 봄용 웹 애플리케이션 TDD-ing에 접근하겠습니까?

응용 프로그램 컨텍스트 생성을 단위 테스트 해 주시겠습니까? 그렇다면 어떻게 할 것입니까?

xml 또는 주석 기반 구성 대신 Java 구성을 사용하는 경우 봄용 응용 프로그램을 TDD하는 것이 더 쉬울까요?

답변

11

스프링 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 개).

+0

그래서, 예를 들어, 다른 서비스를 조종하는 컨트롤러를 테스트하는 테스트부터 시작하여 다른 서비스를 조롱 한 다음 해당 서비스를 테스트 할 새 테스트를 작성하는 등 목표를 달성하셨습니까? –

+0

예. TDD의 가장 중요한 핵심 가치 중 하나는 "작은 단계"입니다. 테스트에서 100 줄이 넘는 코드가 실행되면 거의 "작은 단계"가 아닙니다. –