인프런 커뮤니티 질문&답변
OrderRepositoryTest에서 Product 객체를 생성하는 것을 생략하고 테스트 해도 괜찮나요?
작성
·
181
·
수정됨
0
OrderRepository에서 startDateTime, endDateTime, orderStatus를 파라미터로 받아 List<Order>를 반환하는 findOrdersBy 쿼리메소드를 테스트하려고합니다.
OrderRepositoryTest 내부에서 해당 테스트를 작성하던 중 given절에서 Product 객체를 생성하는 과정을 생략하고 Order 객체를 생성할때 비어있는 리스트를 이용하여 생성하도록 하였습니다.
@ActiveProfiles("test")
@SpringBootTest
class OrderRepositoryTest {
@Autowired
private OrderRepository orderRepository;
@DisplayName("원하는 기간과 원하는 주문상태의 주문들을 조회한다.")
@Test
void findOrdersBy() {
// given
LocalDate registeredTime = LocalDate.of(2024, 10, 24);
Order order1 = Order.builder()
.products(List.of())
.orderStatus(PAYMENT_COMPLETED)
.registeredDateTime(registeredTime.atStartOfDay())
.build();
Order order2 = Order.builder()
.products(List.of())
.orderStatus(PAYMENT_COMPLETED)
.registeredDateTime(registeredTime.plusDays(1).atStartOfDay())
.build();
orderRepository.saveAll(List.of(order1, order2));
// when
List<Order> orders = orderRepository.findOrdersBy(
registeredTime.atStartOfDay(),
registeredTime.plusDays(1).atStartOfDay(),
PAYMENT_COMPLETED);
// then
assertThat(orders).hasSize(1)
.extracting("orderStatus", "registeredDateTime")
.contains(
tuple(PAYMENT_COMPLETED, registeredTime.atStartOfDay())
);
}
이는 테스트하려는 목적이 Order 객체 내부에 적절한 List<OrderProduct> 값을 가지고 있는지를 검증하려는 것이 아니고 findOrdersBy 쿼리메소드가 적절한 Order객체를 가져오는지를 테스트하는 것이라고 생각하였습니다.
위와 같이 실제 객체를 생성하는 것 대신 비어있는 리스트 값을 활용하는 것도 괜찮은지 궁금합니다.
답변 2
0
안녕하세요, sanghyeon Lee 님!
네, 말씀주신 것처럼 테스트하려는 케이스 시나리오에 Product가 영향을 끼치는 부분이 없다고 판단하신다면, 그렇게 생성해도 괜찮을 것 같아요 ㅎㅎ
감사합니다. 🙂
0
안녕하세요, 인프런 AI 인턴입니다.
sanghyeon Lee님께서 궁금해하신 부분에 대해 답변드리겠습니다.
현재 말씀하신 테스트의 목적은 findOrdersBy 메소드가 올바른 Order 객체를 반환하는지를 검증하는 것입니다. 이 경우, Order 객체의 내부의 List<OrderProduct>가 테스트의 성공 여부에 직접적인 영향을 미치지 않는다면, 빈 리스트(List.of())를 활용하는 것 또한 유효한 방법입니다.
테스트에서는 테스트하려는 기능에 집중하기 위해 다른 불필요한 복잡도를 줄이는 것이 중요합니다. 따라서 주문 제품 리스트가 findOrdersBy 메소드의 결과에 영향을 미치지 않는 상황이라면, 단순화된 조건으로 테스트를 진행하는 것이 합리적입니다.
이는 또한 테스트의 범위(scope)를 명확하게 설정하고, 테스트하고자 하는 대상에만 집중할 수 있도록 합니다. 만약 후에 OrderProduct 리스트가 테스트에 영향을 미치는 요구사항이 생긴다면, 그때 적절한 객체를 생성하여 포함시키면 되겠습니다.
이처럼 테스트 목적을 뚜렷하게 하고 불필요한 설정을 줄이는 것은 흔히 사용되는 접근 방식이며, 성능과 유지 보수성을 향상시킬 수 있습니다.
도움이 되셨길 바랍니다! 🧑💻
Spring Boot Reference Documentation 출처: 여기





