
✅ 테스트 코드
: 작성한 코드가 의도대로 작 동작하는지 확인하는 목적으로 작성하는 코드.
📌 테스트 코드의 장점
- 유지보수에 좋음.
- 코드 수정 시, 기존 코드가 잘 동작하지 않을까바 걱정하지 않아도 됨.
📌 given - when - then' 패턴
: 테스트 코드의 패턴 중 하나로, given-when-then 패턴은 테스트 코드를 3단계로 구분해 작성하는 방식.
- given : 테스트 ' 준비' 단계
- when : 테스트 '진행 ' 단계
- then : 테스트 결과 ' 검증' 단계
✅ 스프링 부트와 테스트
스프링 부트는 테스트를 위한 도구/애너테이션을 제공함.
그중 'spring-boot-stater-test' 에 테스트를 위한 도구가 모여있음.
| 스프링 부트 스타터 테스트 목록 |
| JUnit : 자바용 단위 테스트 프레임워크. |
| AssertJ : JUnit과 함께 어설션(검증문)의 가독성을 높이는데 사용되는 라이브러리. |
| Mockito : 목 객체(테스트용 가짜 객체) 생성/관리/검증을 지원하는 테스트 프레임워크. |
| Spring Test & Spring Boot Test : 스프링부트 애플리케이션을 위한 통합 테스트 지원. |
| JsonPath : JSON 데이터에서 특정 데이터를 선택/검색하기위한 라이브러리. |
✅ JUnit
: 자바용 단위(보통 메서드) 테스트 프레임워크.
| JUnit 특징 |
| 사용법이 간단함. |
| 테스트 결과가 직관적. (즉각적인 피드백) |
| 테스트 방식을 구분할 수 있는 애너테이션 제공 |
| 예상 결과를 검증하는 어설션 메서드 제공 |
| @Test 로 메서드를 호출할 때마다 새 인스턴스 생성, 독립 테스트 가능. |
✅ 테스트에 사용되는 애너테이션 목록
스프링 부트는 테스트를 위한 도구/애너테이션을 제공함.
그중 'spring-boot-stater-test' 에 테스트를 위한 도구가 모여있음.
| 테스트에 사용되는 애너테이션 목록 | |
| @SpringBootTest | @SpringBootApplication 이 추가된 클래스(메인)을 찾고, 클래스에 포함된 빈을 찾아 테스트용 어플리케이션 컨텍스트를 만듦. * WebApplicactionContext : 웹 어플리케이션에 필요한 몇가지 기능이 추가된 인터페이스 |
| @AutoConfigureMockMvc | MockMvc를 생성/자동구성하는 애너테이션. (즉, 컨트롤러 테스트 시, 사용) * MockMvc : 어플을 서버에 배포하지않고, 테스트용 MVC 환경을 만들어 요청/전송/응답 기능을 지원. |
| @DisplayName | 테스트 이름 명시. |
| @BeforeAll | - 실행 : 전체 테스트 시작 전 1번 실행. - 용도 : DB연결 / 테스트 환경 초기화. - static : O (전체테스트 이므로) |
| @AfterAll | - 실행 : 전체 테스트 종료 전 1번 실행. - 용도 : DB연결 종료 / 공통적 자원 해제. - static : O (전체테스트 이므로) |
| @BeforeEach | - 실행 : 각 테스트 케이스 시작 전 실행. - 용도 : 객체 초기화 / 테스트에 필요한 값 미리 넣을때 - static : X (각 인스턴스에 대해 메서드를 호출해야하므로 public) |
| @AfterEach | - 실행 : 각 테스트 케이스 종료 전 실행. - 용도 : 특정 데이터 삭제. - static : X (각 인스턴스에 대해 메서드를 호출해야하므로 public) |
📌 애너테이션 실행 순서

📌 애너테이션 적용 예시
import org.junit.jupiter.api.*;
public class JUnitTest {
@BeforeAll
static void beforeAll() {
System.out.println("@BeforeAll");
}
@BeforeEach
public void beforeEach() {
System.out.println("@BeforeEach");
}
//--------------------------------------
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
@Test
public void test3() {
System.out.println("test3");
}
//-------------------------------------
@AfterAll
static void AfterAll() {
System.out.println("@AfterAll");
}
@AfterEach
public void afterAll() {
System.out.println("@BeforeEach");
}
}
✅ 테스트 코드 작성 예시
given (준비) : 멤버 저장
when (실행) : 멤버리스트 조회 API 호출
then (검증) : 응답코드 200OK / 0번째 요소의 id, name 값이 저장된 값과 같은지 확인
@SpringBootTeset // 테스트용 어플리케이션 컨텍스트 생성
@AutoConfigureMockMvc // MockMvc 생성
class ControllerTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext context;
@Autowired
protecte MemberRepository memberRepository;
@BeforeEach // 각 테스트 케이스 실행 전, 실행하는 메서드
public void mockMvcSetUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
.build();
}
@AfterEach // 각 테스트 케이스 종료 전, 실행하는 메서드
public void cleanUp() {
memberRepository.deleteAll();
}
@DisplayName("getAllMembers : 아티클 조회에 성공한다.")
@Test
public void getAllMembers() throws Exception {
// given
final Stirng url = "/test";
Member savedMember = memberRepository.save(new Member(1L, "홍길동"));
// when
final ResultActions = mockMvc.perform(get(url) // perform() : 메서드 요청 전송
.accept(MediaType.APPLICATION_JSON)); // accept() : 응답 형태 결정
// then
result. andExpect(status().isOK()) // andExpect() : 응답 검증
. andExpect(jsonPath("$[0].id").value(savedMember.getId())) // jsonPath() : 응답값 가져오기
. andExpect(jsonPath("$[0].id").value(savedMember.getId()));
}
}
참고자료 : 스프링 부트 3 백엔드 개발자 되기: 자바 편
https://product.kyobobook.co.kr/detail/S000201766024
스프링 부트 3 백엔드 개발자 되기: 자바 편 | 신선영 - 교보문고
스프링 부트 3 백엔드 개발자 되기: 자바 편 | ★ 자바 백엔드 개발자가 되고 싶다면 ★ 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은
product.kyobobook.co.kr