작성
·
539
·
수정됨
0
안녕하세요!
실무에서 테스트 코드 적용을 위해 강의를 열심히 듣고 있는 중 궁금한 부분이 있습니다.
테스트코드 사용 시 @BeforeEach를 사용하는 경우도 있는데, sql로 초기 데이터 추가를 사용하시는 이유가 궁금합니다.
작은 서비스가 아니고 복잡한 서비스의 경우 sql로 넣는게 편할것 같기는 한데, 상태에 따라 id값이 필요한 경우도 있고, sql로 작성 시 테스트 마다 데이터가 적용이 동일하지 않을 것 같기도 해서 실제 복잡한 프로젝트에서 어떻게 사용하시는지 궁금해서 문의드립니다.
@BeforeEach가 한눈에 들어오지 않아서 잘 사용하지 않으신다고 설명해 주시기는 했지만, SQL로 사용 시 조회 등의 테스트에서는 특정 상태의 데이터 id를 알아야 하고, 그럼 SQL에서 해당 데이터의 id값과 상태값을 다시 확인해야 하는 형태는 동일하게 한눈에 안 들어올 것 같아서 고민이 되더라고요.
저도 SQL로 초기 데이터를 추가하는 형태로 사용하다가 이후에 테스트 코드의 유지보수가 쉽지 않은 경험이 있어서 강사님께서는 복잡한 비즈니스의 실무에서는 어떻게 사용하시는 궁금합니다.
감사합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
wony님, 테스트 코드에서 @BeforeEach
대신 SQL을 사용하여 초기 데이터를 설정하는 경우, 각각의 방법에 대한 장단점과 프로젝트의 성격에 따라 선택이 달라질 수 있습니다.
SQL을 사용하여 데이터베이스를 초기화하는 방식은 복잡한 서비스에서 자주 사용됩니다. 이러한 방식의 주요 장점은 데이터 상태를 명확하게 제어할 수 있다는 것입니다. 예를 들어, 테이블 스키마와 데이터 셋을 정확하게 정의하고자 할 때 SQL로 초기화하는 것이 유리합니다.
반면, @BeforeEach
를 사용하는 방식은 상태를 기반으로 하는 간단한 초기화에 유용합니다. 특히 스프링 부트에서 제공하는 @DataJpaTest
와 같은 테스트 어노테이션을 사용할 때 @BeforeEach
와 함께 사용하면 테스트 환경을 빠르고 쉽게 설정할 수 있습니다. @BeforeEach
는 각 테스트 실행 전에 전처리를 수행하기 때문에, 동일한 상태의 기반 데이터를 필요로 하는 테스트의 경우 유용합니다.
실제 복잡한 프로젝트에서는 테스트의 목적과 요구 사항에 맞추어 적절한 초기화 방법을 선택해야 합니다. 예를 들어, @AutoConfigureTestDatabase
애노테이션을 사용하여 테스트용 데이터베이스 설정을 자동으로 구성할 수 있으며, 실제 데이터베이스를 대상으로 테스트를 수행하고자 한다면 Replace.NONE
옵션을 사용하여 실제 데이터베이스를 이용하도록 설정할 수 있습니다.
본질적으로, 테스트를 위한 데이터베이스 초기화 방법은 프로젝트의 요구와 테스트 작성자의 선호도에 따라 결정됩니다. 명확한 출처가 필요한 경우, “Spring Boot Reference Documentation v3.1.5”의 18.9절 “Database Initialization” 및 7.8.3절 “Auto-configured Data JPA Tests”에 관한 가이드를 참조하실 수 있습니다.
참고 URL:
- 데이터베이스 초기화: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.data-initialization
- 자동 구성된 Spring Data JPA 테스트: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.testing.spring-boot-applications.autoconfigured-spring-data-jpa
도움이 되셨길 바랍니다.