🏠 Home

목차

Spring의 테스트 주도 개발 스타일

🗓️

TDD란 무엇인가? 를 떠나서 스프링 프로젝트에서 TDD를 어떻게 진행하는지에 대한 정리.

여러 스타일 중 한가지

  • TDD는 기본적으로 테스트 코드를 빌드업 해가면서 개발함. 즉, 이미 한참 완성된 코드를 테스트 하는건 TDD의 방향이 아님. 이런 경우는 있을까?

서비스 로직

  • 서비스 로직을 먼저 POJO로 만든다. 테스트 할 로직을 우선으로 만들면서 서비스 클래스, 엔티티, 영속성 클래스를 만든다.
  • 서비스 로직에서 필요한 메서드, 클래스 등은 이너클래스로 먼저 개발 한 뒤 테스트가 완료되면 IDE를 통해 리팩토링 기능으로 꺼낸다. (IntelliJ → Move Inner tp Upper Level)
  • 클래스를 옮긴 후 부터는 스프링 통합테스트에 붙여 @Autowired가 가능해짐.

엔티티와 영속성

  • 엔티티로 잡을 클래스는 인메모리로 먼저 setter, getter 코딩해서 Map에다 담은 후에 기본 테스트가 완료되면 JPA Repository를 붙인다.
  • JPA로 스프링부트 통합 테스트를 하는 경우 매 테스트마다 프록시 상태 초기화를 위해 InitializingBean 을 구현한 별도의 클래스를 @BeforeEach 메소드를 작성하여 EntityManagerflush() 해야함. (예: ID 시퀀스 초기화)

API 테스트

  • 기본적으로 스프링 통합 테스트
  • REST API 테스트는 io.restassured.RestAssured 로 한다. 메소드 체이닝을 통해 given, when, then 식으로 검증 가능.

통합 테스트

  • 엔티티나 API 테스트엔 스프링 통합 테스트가 필요없지만, 서비스 코드는 테스트 코드 완성단계에선 필요함.

🏷️