-
Notifications
You must be signed in to change notification settings - Fork 0
test comparison
doplinBlue edited this page May 9, 2025
·
5 revisions
-
단위 테스트 (Mockito 기반) →
Service계층 테스트 -
슬라이스 테스트 (
@DataJpaTest) →Repository계층 검증 -
통합 테스트 (
@SpringBootTest) → 전체 흐름 검증
비즈니스 로직만 검증하고, Repository는 모킹(mock)으로 처리해 외부 의존성 제거.
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void 사용자명으로_조회하면_정상적으로_리턴된다() {
// Given
String username = "testuser";
User user = new User(username, "test@example.com");
when(userRepository.findByUsername(username)).thenReturn(Optional.of(user));
// When
UserDto userDto = userService.findUserByUsername(username);
// Then
assertThat(userDto.getUsername()).isEqualTo("testuser");
verify(userRepository).findByUsername(username); // 호출 여부 검증
}
}
JPA Repository에서 JPQL/쿼리 동작이 잘 되는지 빠르게 검증.
@DataJpaTest
class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
void 사용자명을_기반으로_조회할_수_있다() {
// Given
User saved = userRepository.save(new User("testuser", "test@example.com"));
// When
Optional<User> found = userRepository.findByUsername("testuser");
// Then
assertThat(found).isPresent();
assertThat(found.get().getEmail()).isEqualTo("test@example.com");
}
}
Controller → Service → Repository 전체 흐름을 실제처럼 테스트.
REST API 전체 동작도 같이 확인 가능.
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
class UserControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private UserRepository userRepository;
@BeforeEach
void setup() {
userRepository.save(new User("testuser", "test@example.com"));
}
@Test
void 사용자명으로_사용자정보_API_조회() throws Exception {
mockMvc.perform(get("/api/users/testuser"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.username").value("testuser"))
.andExpect(jsonPath("$.email").value("test@example.com"));
}
}
| 테스트 | 주 대상 | 특징 | 실제 현업 사용도 |
|---|---|---|---|
| 단위 테스트 (Mockito) | Service | 빠르고 독립적 | ⭐⭐⭐⭐ |
| 슬라이스 테스트 (@DataJpaTest) | Repository | 쿼리 검증에 최적 | ⭐⭐⭐⭐ |
| 통합 테스트 (@SpringBootTest) | 전체 흐름 | 전체 연동 확인 | ⭐⭐⭐ |