[Backend/Spring] Spring Boot - 테스트 코드(JUnit5 / Mockito)

2026. 3. 31. 12:06·Backend/Spring

지금까지 코드를 수정하고 확인할 때마다 앱을 실행하고 Postman으로 직접 요청을 보내서 확인했다.

매우 귀찮다..

이걸 테스트 코드로 대체할 수 있다고 한다. 한번 알아보자.

 

테스트 종류는 크게 두 가지가 있다.

  • 단위 테스트(Unit Test) : 특정 클래스나 메서드 하나만 독립적으로 테스트
    DB나 외부 서비스에 의존하지 않고 Mockito 로 가짜 객체를 만들어 테스트 한다. 실행 속도가 빠르다.
  • 통합 테스트(Integration Test) : 여러 계층을 실제로 연결해서 테스트
    실제 DB에 데이터를 넣고 조회하는 것까지 확인한다. 실행 속도가 느리다.

이번 글에서는 단위 테스트를 해보려고 한다.


파일 수정

테스트 코드에서 생성자로 객체를 만들어야 하기 때문에 기존 코드에서 세 곳을 수정한다.

MemberJoinRequest.java 수정

@AllArgsConstructor 어노테이션 추가

@Getter
@NoArgsConstructor
@AllArgsConstructor  // 추가
public class MemberJoinRequest {
    private String email;
    private String password;
    private String nickname;
}

ItemCreateRequest.java 수정

@AllArgsConstructor 어노테이션 추가

@Getter
@NoArgsConstructor
@AllArgsConstructor  // 추가
public class ItemCreateRequest {
    private String title;
    private String description;
    private int price;
    private Long memberId;
}

Member.java 수정

// 기존 생성자
public Member(String email, String password, String nickname) {
    this.email = email;
    this.password = password;
    this.nickname = nickname;
}

// 테스트용 생성자 추가 (id까지 설정)
public Member(Long id, String email, String password, String nickname) {
    this.id = id;
    this.email = email;
    this.password = password;
    this.nickname = nickname;
}

테스트 코드

테스트 코드는 src/test/java 하위에 작성했다. 패키지 구조는 src/main/java 와 동일하게 맞춰줬다.

src/test/java
└── com.seongmo.myshop
    ├── member
    │   └── MemberServiceTest.java
    └── item
        └── ItemServiceTest.java

given / when / then 패턴

테스트 코드는 given/when/then 패턴으로 작성한다.

  • given : 테스트에 필요한 데이터와 Mock 동작을 설정한다.
  • when : 테스트할 메서드를 실행한다.
  • then : 결과를 검증한다.

이 패턴을 따르면 테스트 코드를 읽는 것만으로 "어떤 상황에서, 무엇을 실행했을 때, 어떤 결과가 나와야 하는지"를 파악할 수 있다.

주요 어노테이션

  • @ExtendWith(MockitoExtension.class) : Mockito를 JUnit5와 함께 사용하기 위한 설정
  • @Mock : 가짜 객체 생성 → MemberRepository 를 가짜 객체로 만들어서 실제 DB 없이도 테스트할 수 있도록 함
  • @InjectMocks : @Mock 으로 만든 가짜 객체들을 테스트 대상 클래스에 주입
  • given().willReturn() : 가짜 객체가 호출됐을 때 어떤 값을 반환할지 설정
  • @DisplayName : 테스트 이름을 한글로 작성할 수 있도록 해줌, 테스트 실행 결과에 이 이름이 표시됨

테스트 실행 결과가 출력되도록 build.gradle에 아래 설정을 추가했다.

test {
    useJUnitPlatform()
    testLogging {
        events "passed", "failed", "skipped"
    }
}

실행 및 확인

터미널에서 아래 명령어를 입력해서 테스트를 실행할 수 있다.

./gradlew test --rerun-tasks

 

이번에도 소스코드는 깃허브 태그 링크로 첨부한다.

 

GitHub - SeongmoAhn/myshop-project at 260331-test-code

Contribute to SeongmoAhn/myshop-project development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'Backend > Spring' 카테고리의 다른 글

[Backend/Spring] Spring Boot - Redis 연동과 캐싱  (0) 2026.03.31
[Backend/Spring] Spring Boot - Spring Security + JWT  (0) 2026.03.31
[Backend/Spring] Spring Boot - 예외 처리  (0) 2026.03.29
[Backend/Spring] Spring Boot - @OneToMany 와 N+1 문제  (0) 2026.03.29
[Backend/Spring] Spring Boot - JPA 연관관계  (0) 2026.03.29
'Backend/Spring' 카테고리의 다른 글
  • [Backend/Spring] Spring Boot - Redis 연동과 캐싱
  • [Backend/Spring] Spring Boot - Spring Security + JWT
  • [Backend/Spring] Spring Boot - 예외 처리
  • [Backend/Spring] Spring Boot - @OneToMany 와 N+1 문제
Study with Me!
Study with Me!
Study with Me!
  • Study with Me!
    Seongmo
    Study with Me!
  • 전체
    오늘
    어제
    • Computer (147) N
      • Computer Science (61)
        • Data Structure (51)
        • Algorithm (6)
        • 선형대수 with C++ (4)
      • Backend (11) N
        • 백엔드 취업을 위해.. (1)
        • Spring (10) N
        • Database (0)
        • Testing (0)
        • Infra & DevOps (0)
      • Arm Architecture (1)
        • Register (0)
        • Assembly Instruction (1)
      • Linux (32)
        • Linux Kernel (4)
        • 라이브러리 함수 구현하기 (0)
        • 쉘, 쉘 명령어 구현하기 (15)
        • Ubuntu (13)
      • Cloud Infrastructure (8)
        • Kubernetes (7)
        • OpenStack Magnum (1)
      • AWS (3)
      • Baekjoon (18)
      • Tools (6)
        • Git & Github (5)
        • Vim (1)
      • 개발 환경 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    STL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Study with Me!
[Backend/Spring] Spring Boot - 테스트 코드(JUnit5 / Mockito)
상단으로

티스토리툴바