인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Henu님의 프로필 이미지
Henu

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문 기능 테스트

단위 테스트, 통합 테스트에 대한 질문입니다.

해결된 질문

작성

·

1.2K

6

안녕하세요.

'주문 도메인 개발 - 주문 기능 테스트' 강의 마지막 부분에서

DB와 상관없이 단위 테스트를 해보는 것도 중요하다라고 언급을 해주셨는데요.

강의를 듣고 이해한 단위 테스트라는 것은 JPA를 이용하는 문법(Service, Repository)까지 테스트 하지 않고, 엔티티 클래스(Order, OrderItem 등)에 선언된 비즈니스 로직 메소드만 가지고 잘 동작하는지 테스트 하는것을 의미하는 것인가요?

예를 들어,

'주문 상품 재고 감소' 테스트 코드를 작성한다면, 

초기값이 설정된 회원과 주문 상품 객체를 생성한 후

주문시 'Service,'와 'Repository'를 사용하지 않고 순수 엔티티 클래스에 정의된 비즈니스 로직 메소드가 잘 동작하는지 확인하는 코드를 작성하면 되는 것 일까요?

위 내용이 맞다면 단위 테스트의 대상은 아래와 같겠네요.

OrderItem Class의 createOrderItem(),

Order Classs의 createOrder(),

Item Abstract Class의 removeStock()

미리 답변 감사드립니다.

답변 3

9

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. PainKiller님^^

(제가 좋아했던 게임 이름과 같으시네요 ㅎㅎ)

DB와 상관없이 단위 테스트를 하는 것이 중요합니다.

순수 도메인 로직이 잘 동작하는지 도메인 클래스도 테스트하고

핵심 비즈니스 로직이 있는 서비스 클래스도 테스트 합니다.

이때 Repository는 Mock 라이브러리를 사용해서 처리하면 됩니다.

핵심은 스프링 컨테이너나 특정 DB같은 하부 인프라 구조에 의존하지 않고, 핵심 비즈니스 로직(서비스, 엔티티)를 테스트 할 수 있으면 됩니다.

이런 방법을 실무에서 사용하게되면, 개발이 정말 즐거워지고, 안전망 덕분에 개발에 자신감이 붙습니다. 테스트도 순수 자바가 동작하는 시간만 소요되기 때문에 매우 빠르게 피드백을 받을 수 있습니다.

제가 실무에서 가장 중요하게 생각하는 테스트는 이러한 핵심 비즈니스 로직을 단위 테스트로 작성하는 것입니다.

다른 테스트들은 ROI가 나오면 하고, 안나오면 안하기도 하는데, 핵심 비즈니스 로직에 대한 단위 테스트는 선택이 아니라 필수라 생각합니다.

즐거운 설날 되세요^^

3

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. lbd4946님

테스트에는 여러가지 종류가 있습니다. 개발자가 스스로 하는 테스트는 크게 단위 테스트 통합 테스트가 있습니다.

단위 테스트는 최소한의 단위로만 테스트하는 것을 이야기합니다. 여기서는 특정 핵심 도메인 로직을 테스트 하는 것이 포함될 수 있습니다.

그런데 lbd4946님이 질문하신 테스트는 메서드 단위보다는 요구사항 별로 하는게 좋다는 것에 답변을 하려면, 이 차이를 이해해야 합니다.

요구사항은 여러가지 단위 기능들을 모아서 테스트해야 합니다. 따라서 단위 테스트로는 어려운 경우가 많습니다. 이 경우 통합 테스트가 필요합니다. 통합 테스트는 쉽게 이야기해서 스프링 컨테이너를 띄우고, DB까지 띄운 상태에서 거의 테스트 서버에 가까운 환경을 만들고, 거기에 자동화된 테스트를 수행하는 것으로 이해하시면 됩니다.

활용1편에서 @SpringBootTest를 사용해서 상품을 주문하고, 이런 부분들은 통합테스트로 이해하시면 됩니다.

P.S: 추가 질문을 달아주시면, 저에게는 해결됨으로 떠 있어서, 제가 놓치는 경우가 많습니다. 앞으로는 새로 질문을 만들어서 올려주세요^^

감사합니다.

0

추가 질문입니다.

테스트는 메서드 단위보다는 요구사항? 별로 하는게 좋다는 말도 들었는데 도메인 로직 테스트 시에는 메서드 별로 하는게 좋은건가요?

Henu님의 프로필 이미지
Henu

작성한 질문수

질문하기