java
CHAPTER 64 / 69
읽기 약 2분
FUNCTION
테스트 코드 JUnit5
핵심 개념
JUnit5와 AssertJ로 Spring Boot 테스트를 작성한다. @SpringBootTest, @WebMvcTest, @DataJpaTest 계층별 테스트 전략.
코드 분석
// 서비스 단위 테스트
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@InjectMocks UserService userService;
@Mock UserRepository userRepository;
@Mock PasswordEncoder passwordEncoder;
@Test
@DisplayName("이메일 중복 시 예외 발생")
void createUser_DuplicateEmail_ThrowsException() {
// given
String email = "test@test.com";
when(userRepository.existsByEmail(email)).thenReturn(true);
// when & then
assertThatThrownBy(() ->
userService.create(new CreateUserDto(email, "password", "이름")))
.isInstanceOf(DuplicateEmailException.class)
.hasMessageContaining("이미 사용 중인 이메일");
}
}
// 컨트롤러 슬라이스 테스트
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired MockMvc mockMvc;
@MockBean UserService userService;
@Autowired ObjectMapper objectMapper;
@Test
@DisplayName("사용자 목록 조회 성공")
void getUsers_Success() throws Exception {
when(userService.findAll()).thenReturn(List.of(new UserDto(1L, "홍길동")));
mockMvc.perform(get("/api/users"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.data[0].name").value("홍길동"))
.andDo(print());
}
}AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
이 Spring '테스트 코드 JUnit5' 코드에서 DI 관련 버그·순환 참조·트랜잭션 누수를 찾아서 수정해줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
'테스트 코드 JUnit5'를 Spring Boot 3.x로 구현한 실전 API 코드(컨트롤러+서비스+레포지토리+테스트)를 완성형으로 만들어줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
이 Spring '테스트 코드 JUnit5' 프로젝트의 빈 구조와 의존성 트리를 전체 분석하고 N+1 쿼리·순환 참조·성능 병목을 정리해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
Spring '테스트 코드 JUnit5' vs Quarkus·Micronaut·Ktor의 동일 기능 구현을 2026년 한국 채용 시장 기준으로 솔직히 비교해줘.
⭐ 이것만 기억하세요
테스트 코드 JUnit5는 이 3가지만 확실히 잡으세요
1.단위 테스트만으로는 컨트롤러→서비스→DB 전체 흐름을 검증할 수 없습니다
2.JUnit5 + @SpringBootTest로 통합 테스트, MockMvc로 API 테스트, @DataJpaTest로 리포지토리 테스트를 작성합니다
3.다음 챕터에서 외부 의존성을 가짜로 대체하는 Mockito를 배웁니다
공유하기
진행도 64 / 69