inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

테스트 코드에서 @BeforeEach가 아니라 sql 사용하시는 이유 문의드립니다.

691

wony

작성한 질문수 4

0

안녕하세요!

실무에서 테스트 코드 적용을 위해 강의를 열심히 듣고 있는 중 궁금한 부분이 있습니다.

 

테스트코드 사용 시 @BeforeEach를 사용하는 경우도 있는데, sql로 초기 데이터 추가를 사용하시는 이유가 궁금합니다.

 

작은 서비스가 아니고 복잡한 서비스의 경우 sql로 넣는게 편할것 같기는 한데, 상태에 따라 id값이 필요한 경우도 있고, sql로 작성 시 테스트 마다 데이터가 적용이 동일하지 않을 것 같기도 해서 실제 복잡한 프로젝트에서 어떻게 사용하시는지 궁금해서 문의드립니다.

@BeforeEach가 한눈에 들어오지 않아서 잘 사용하지 않으신다고 설명해 주시기는 했지만, SQL로 사용 시 조회 등의 테스트에서는 특정 상태의 데이터 id를 알아야 하고, 그럼 SQL에서 해당 데이터의 id값과 상태값을 다시 확인해야 하는 형태는 동일하게 한눈에 안 들어올 것 같아서 고민이 되더라고요.

 

저도 SQL로 초기 데이터를 추가하는 형태로 사용하다가 이후에 테스트 코드의 유지보수가 쉽지 않은 경험이 있어서 강사님께서는 복잡한 비즈니스의 실무에서는 어떻게 사용하시는 궁금합니다.

 

감사합니다.

 

spring tdd jpa 소프트웨어-테스트 unittest

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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

도움이 되셨길 바랍니다.

UserService, CertificationService 책임 분리 기준 질문

0

28

1

service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존

0

59

1

Service 소형 테스트 질문

0

83

1

조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?

0

116

1

controller 의 port 패키지의 service 인터페이스 사용

0

72

1

빌드 문제

0

92

1

빌드 안 되시는 분들 참고

0

102

1

update에서 Repository.save

0

105

1

최종 완성된 코드를 받아 볼 수 있을까요?

0

156

1

의존성 역전으로 해결한 외부의존성?

0

162

1

좋은 설계

0

180

1

Controller에 테스트

0

139

1

JPA가 아닌 Mapper 아키텍처 기반 테스트 코드 작성

0

242

0

영속성 객체 구분으로 인한 JPA와 Querydsl의 Projection 사용

0

224

1

인프라계층 구현체와 테스트 구현체에 대한 질문

0

223

1

실습 코드 커밋

0

373

1

UserEntity 메서드

0

294

2

CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것

0

217

1

레이어드 아키텍처 개발에 대하여

0

231

1

BDDMockito의 when을 사용한 코드가 given 절에 있는 이유가 궁금합니다.

0

223

1

테스트에서 주입과 생성

0

198

1

프로젝트 코드는 제공해주시지 않는건가요?

0

382

2

개선된 아키텍처의 구조

0

277

1

서비스 레이어의 단위 테스트 범위 고민

0

188

1