1. 테스트 코드란?
테스트 코드는 애플리케이션의 특정 기능이 의도한 대로 동작하는지 확인하기 위한 코드입니다. Spring에서는 다양한 테스트 도구를 제공하며, 대표적으로 JUnit
과 Spring Test
가 있습니다.
2. Spring에서의 테스트 코드 구성 요소
- JUnit : 자바 기반의 단위 테스트를 지원하는 프레임워크.
- Mockito : 객체 지향 프로그래밍에서 모의 객체(Mock)를 활용한 테스트 지원 라이브러리.
- Spring Test : Spring 컨텍스트에서의 테스트를 지원하는 도구.
- @SpringBootTest : 스프링 애플리케이션 전체를 테스트하는 데 사용됩니다. 주로 통합 테스트 시 사용됩니다.
3. JUnit의 주요 어노테이션
@Test
: 테스트 메서드를 나타냅니다.@BeforeEach
: 각 테스트 전에 실행되는 메서드를 정의합니다.@AfterEach
: 각 테스트 후에 실행되는 메서드를 정의합니다.@BeforeAll
: 모든 테스트 이전에 한 번 실행되는 메서드를 정의합니다.@AfterAll
: 모든 테스트 이후에 한 번 실행되는 메서드를 정의합니다.
4. SpringBootTest 어노테이션
@SpringBootTest
: Spring의 전체 컨텍스트를 로드하여 통합 테스트를 수행할 수 있게 합니다.
@SpringBootTest
public class ExampleTest {
@Test
void contextLoads() {
// 테스트 내용
}
}
5. Mockito 사용법
Mockito는 의존성을 가볍게 만들어주는 Mock 객체를 생성하여 테스트에 활용합니다.
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@BeforeEach
void setup() {
MockitoAnnotations.openMocks(this);
}
@Test
void testGetUserById() {
when(userRepository.findById(1L)).thenReturn(Optional.of(new User(1L, "John")));
User user = userService.getUserById(1L);
assertEquals("John", user.getName());
}
6. 테스트 환경 설정
- @MockBean : 실제 빈 대신 Mock 객체를 빈으로 등록하여 테스트합니다.
- @DataJpaTest : JPA 레포지토리 계층을 테스트할 때 사용합니다.
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
void testFindByUsername() {
User user = userRepository.findByUsername("john");
assertNotNull(user);
}
}
▶ TIP & 정리
- 테스트 코드 커버리지 : 테스트 코드의 커버리지를 높이는 것이 중요합니다. 이를 위해 다양한 케이스에 대해 테스트를 작성해보세요.
- 테스트 코드 작성 순서 : "Given-When-Then" 패턴을 사용하면 가독성이 좋은 테스트 코드를 작성할 수 있습니다.
- Given : 테스트의 초기 상태를 정의
- When : 테스트하려는 동작을 정의
- Then : 결과를 검증
- 매개변수화된 테스트 : JUnit5에서는
@ParameterizedTest
를 활용하여 매개변수화된 테스트를 작성할 수 있습니다. 이는 여러 값에 대해 동일한 테스트를 반복할 때 유용합니다. - Mockito의 verify 사용 : 행동 기반 검증이 필요한 경우
verify()
를 활용하여 특정 메서드가 호출되었는지 확인할 수 있습니다.
'Spring' 카테고리의 다른 글
(Spring) Servlet & DispatcherServlet 개념 (0) | 2024.10.14 |
---|---|
(Spring) MVC와 Spring MVC (0) | 2024.10.11 |
(Spring) Lombok & Application Properties (0) | 2024.10.07 |
(Spring) 서버 관련 개념 정리 (0) | 2024.09.26 |
(Spring) Gradle (0) | 2024.09.25 |