자바 프로그래밍 5주차 학습일지

1. 학습한 내용 정리

이번 주차에서는 Spring Boot 애플리케이션에서 테스트 코드를 작성하는 방법을 중심으로 학습하였다. 테스트는 크게 서비스 계층 테스트컨트롤러 계층 테스트로 나누어 진행되었고, 각각의 목적과 접근 방식이 다르다는 점을 확인할 수 있었다.
서비스 계층 테스트에서는 Mockito를 활용하여 Repository를 Mock 객체로 만들고, 실제 데이터베이스 연결 없이 비즈니스 로직만을 독립적으로 검증했다. MockitoExtension을 통해 Mock 객체를 주입하고, 테스트는 주로 given-when-then 패턴으로 구성했다.
컨트롤러 계층 테스트에서는 MockMvc를 사용하여 HTTP 요청을 시뮬레이션하고 응답을 검증하는 통합 테스트를 작성했다. AutoConfigureMockMvc를 적용해 MockMvc 환경을 설정하고, 다양한 HTTP 메서드(GET, POST, DELETE)에 대해 API 엔드포인트가 정상적으로 동작하는지 확인했다.
전체적으로 테스트 코드 작성 시에는 given-when-then 패턴을 일관되게 적용하여 테스트 흐름이 명확하게 유지되도록 구성했다. 이를 통해 테스트의 목적과 의도를 쉽게 이해할 수 있도록 했다.

2. 작성한 핵심 코드 설명

서비스 계층 테스트 코드

서비스 계층 테스트는 Repository를 Mock 객체로 만들어 서비스 로직을 단일 기능 단위로 검증하는 방식으로 작성하였다. MemberRepository를 Mock 처리하고, TestServiceImpl에 InjectMocks로 주입하였다.
전체 회원 조회 테스트에서는 findAll의 반환값을 미리 설정한 뒤, 서비스 메서드 실행 결과를 리스트 크기와 내용으로 검증했다.
회원가입 테스트는 정상적인 데이터 입력과 잘못된 데이터 입력 두 가지 케이스로 나누어 작성했으며, 각각 정상 저장과 실패 처리가 올바르게 동작하는지 확인했다.
회원 ID 조회 테스트에서는 Optional을 활용하여 성공 케이스와 실패 케이스를 모두 검증하였다.
회원 삭제 테스트는 deleteById 호출 여부와 동작 성공 여부를 검증하는 방식으로 구성하였다.

컨트롤러 계층 테스트 코드

컨트롤러 테스트에서는 MockMvc를 통해 실제 서버를 띄우지 않고도 HTTP 요청을 테스트할 수 있었다.
각 테스트 실행 전 MockMvc를 초기화하여 독립적인 환경을 유지했다.
전체 회원 조회 API 테스트는 테스트 데이터를 먼저 저장하고, GET 요청이 반환하는 JSON 응답이 의도한 형식과 값을 가지는지 검증하였다.
데이터 추가 API 테스트는 POST 요청을 전송하고 응답 메시지 구조와 값이 정상적으로 반환되는지 확인하였다.
단일 회원 조회와 삭제 API 테스트에서도 각각의 기능이 예상대로 동작하는지 HTTP 응답 코드와 JSON 응답 필드를 기반으로 검증하였다.

3. 오류 해결 과정 및 주의사항

테스트 작성 과정에서 몇 가지 주의해야 할 점을 확인할 수 있었다.
먼저 BeforeEach 메서드의 이름은 동작에 직접적인 영향은 없지만, 일관된 네이밍 컨벤션을 유지하는 것이 가독성 측면에서 중요함을 알 수 있었다.
또한 jsonPath 문법에 오탈자가 있는 경우 테스트가 실패할 수 있다는 점도 확인하였다. JSON 구조 검증 시에는 정확한 표현식을 사용해야 한다.
Mock 객체를 사용할 때는 테스트에 필요한 모든 Mock 동작을 명확히 설정해야 하며, 특히 Repository처럼 Optional을 반환하는 경우 Optional.of와 Optional.empty를 명확히 구분해 설정해야 한다.
테스트 간 데이터 격리 역시 중요한 부분이었다. 각 테스트가 독립적으로 실행될 수 있도록 매번 필요한 데이터를 생성하거나 정리하는 방식으로 구성해야 한다는 점을 확인하였다.
이러한 과정을 통해 테스트 코드 작성 시 주의해야 할 점과 패턴을 자연스럽게 익힐 수 있었다.