테스트 코드에서 data.sql 사용 없이 Product를 직접 생성한 이유
172
작성한 질문수 92
테스트 코드 작성 시에 data.sql을 활용하지 않으신 이유가 궁금합니다. @Test 메서드 내에서 Product를 생성하는 것보다 이미 작성된 data.sql을 활용하는 것이 더 편해보이는데 Product 인스턴스를 직접 생성하신 이유가 무엇인가요?
혹시 테스트마다 필요로 하는 데이터가 다르기 때문인 것일까요?
답변 2
0
안녕하세요, 도토리 님!
뒤쪽 섹션8 강의 중에도 이야기하는 내용인데요.
연습 프로젝트의 경우 크기가 작고 다루기 편한 형태라 초반에는 data.sql을 사용하는 것이 편해 보일 수 있겠습니다만, 실무에서 다루는 거대한 프로젝트 안에서 모든 test fixture 를 data.sql로 관리하려면 이 또한 커다란 관리 포인트가 됩니다. 유지보수가 필요한 또 다른 지점이 생기는 것이죠.
또한 여러 사람이 작업하는 상황에서, 각자의 테스트 케이스에 맞게 data.sql 을 지속적으로 업데이트하고 관리하기란 꽤 어려운 일일 거예요.
예를 들어 Product의 필드가 수십 개인데, 각 테스트마다 사용하고자 하는 필드가 달라서 그에 맞게 모든 데이터를 하나의 data.sql에서 생성하려면.. 정말 복잡하겠죠.
그래서 각 테스트 케이스에 맞게, 테스트 클래스 내에서 가독성 있게 fixture 생성 로직을 관리할 수 있는 방향으로 소개드렸습니다.
도움이 되셨기를 바랍니다.
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
도토리님, 질문 주셔서 감사합니다.
테스트 코드 작성 시 특정 엔티티, 예를 들어 Product를 직접 생성하는 이유는 여러 가지가 있을 수 있습니다.
테스트의 독립성: 각 테스트가 서로 독립적으로 실행되어야 합니다.
data.sql을 사용하면 모든 테스트가 같은 초기 데이터에 의존할 수 있으며, 어떤 테스트가 데이터를 변경하면 다른 테스트에 영향을 미칠 수 있습니다. 따라서 테스트 코드 내에서 직접Product를 생성하면 이러한 문제를 방지할 수 있습니다.테스트별 요구사항 차이: 해당 테스트마다 필요한 데이터가 다를 수 있습니다. 예를 들어, 조건을 다양하게 테스트하기 위해 여러 다양한 상태의
Product객체가 필요할 수 있습니다. 직접 객체를 생성하면 이러한 요구를 유연하게 처리할 수 있습니다.구체적인 테스트 시나리오 구현: 특정 시나리오를 검증하기 위해
Product를 특정 방식으로 구성해야 할 수도 있습니다. 직접 인스턴스를 생성함으로써 필요한 속성을 설정하고 필요한 대로 시나리오를 맞출 수 있습니다.테스트 속도와 유지보수: 직접 객체를 생성하는 방식은 데이터를 파일에서 로딩하는 방식보다 더 빠를 수 있으며, 변경이 필요할 때 여러 파일을 수정할 필요 없이 코드만 수정하면 되어 유지보수가 용이합니다.
이러한 이유로 data.sql을 사용하지 않고 Product를 직접 생성하는 방법을 선택할 수 있습니다. 각 테스트의 목적과 필요에 따라서 가장 적절한 방법을 선택하는 것이 중요합니다.
Spring Boot에서의 테스트 관련 추가 정보는 아래에서 확인할 수 있습니다:
- Spring Boot Reference Documentation - Testing
- Testing Spring Applications
궁금하신 점이 더 있으시면 언제든지 문의 주세요!
private 상수 테스트 관련 질문
0
82
1
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
0
124
2
커버리지는 어떻게 활용하시는지 궁금합니다.
0
159
2
테스트 문서화 질문입니다
0
104
2
단위테스트 질문이 있습니다
0
94
2
컨트롤러는 모킹을 한 이유가 궁금합니다.
0
100
2
ERD 가장자리에 있는 도메인 테스트 질문
0
87
2
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
0
132
2
OrderCreateRequest DTO에 대해서 궁금한점
0
101
2
고전파의 테스트 대역 사용 대상, 공유 의존성
0
154
2
계층 관련 질문이 있습니다.
0
137
3
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
1
122
2
혹시 update 로직은 어떻게 테스트하나요? (@Setter?)
0
133
2
단위테스트와 통합테스트의 경계가 궁금합니다.
0
227
2
Service+Repository 통합테스트 관련 질문입니다.
0
149
2
OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요
0
183
2
test 용 .yml
0
89
2
throws Exception
0
78
2
카페키오스크 클래스 문의 ,,
0
87
2
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
0
171
2
테스트 코드에서 필요한 생성자
0
137
1
tearDown 순서
0
115
2
@Builder 생성자 private
0
135
2
@DisplayName gradle / intellJ
0
92
2





