SpringBoot 를 배워보자/9. 추가 기능

테스트 (JUnit, Mockito)

_Blue_Sky_ 2024. 9. 29. 19:04
728x90
728x90

스프링 부트 테스트: JUnit과 Mockito를 활용한 심층 가이드

 

스프링 부트 애플리케이션의 품질을 보장하고 안정적인 서비스 운영을 위해서는 철저한 테스트가 필수입니다. JUnit과 Mockito는 스프링 부트 개발에서 가장 많이 사용되는 테스트 프레임워크로, 단위 테스트, 통합 테스트 등 다양한 종류의 테스트를 효과적으로 수행할 수 있도록 지원합니다.

이 글에서는 스프링 부트 애플리케이션을 테스트하는 데 필요한 기본 개념부터 실제 예제까지 상세하게 다루며, JUnit과 Mockito를 활용하여 어떻게 효율적인 테스트 코드를 작성하는지 알아봅니다.

1. JUnit 소개

JUnit은 자바 단위 테스트를 위한 대표적인 프레임워크입니다. 스프링 부트는 JUnit을 기반으로 테스트 환경을 제공하며, @SpringBootTest 애노테이션을 사용하여 스프링 부트 애플리케이션 전체 또는 특정 부분을 테스트할 수 있습니다.

주요 기능:

  • 테스트 케이스 작성: @Test 애노테이션을 사용하여 테스트 메소드를 정의합니다.
  • 테스트 실행: JUnit 테스트 러너를 통해 테스트 케이스를 실행하고 결과를 확인합니다.
  • 어설션: assertEquals, assertTrue 등의 어설션 메소드를 사용하여 예상 결과와 실제 결과를 비교합니다.

2. Mockito 소개

Mockito는 자바 모킹 프레임워크로, 테스트 대상 객체의 의존성을 모킹하여 테스트를 단순화하고 독립적으로 만들어 줍니다. 스프링 부트에서는 @MockBean 애노테이션을 사용하여 빈을 모킹할 수 있습니다.

728x90

주요 기능:

  • 모킹: 실제 객체 대신 가짜 객체(Mock 객체)를 생성하여 테스트합니다.
  • Stubbing: Mock 객체의 메소드 호출 시 특정 값을 반환하도록 설정합니다.
  • Verification: Mock 객체의 메소드가 예상대로 호출되었는지 확인합니다.

3. 스프링 부트 테스트 유형

  • 단위 테스트: 개별 클래스나 메소드의 기능을 검증하는 테스트
  • 통합 테스트: 여러 클래스가 함께 작동하는지 검증하는 테스트
  • 컴포넌트 테스트: 특정 컴포넌트(예: 스프링 빈)가 올바르게 작동하는지 검증하는 테스트

4. 스프링 부트 테스트 예제

@SpringBootTest
class UserServiceTest {

    @Autowired
    private UserService userService;

    @MockBean
    private UserRepository userRepository;

    @Test
    public void saveUser() {
        User user = new User("user1", "password");
        when(userRepository.save(user)).thenReturn(user);

        userService.saveUser(user);

        verify(userRepository).save(user);
    }
}
 
  • @SpringBootTest: 스프링 부트 애플리케이션 컨텍스트를 로드합니다.
  • @Autowired: UserService를 주입받습니다.
  • @MockBean: UserRepository를 모킹합니다.
  • when(userRepository.save(user)).thenReturn(user): userRepository의 save 메소드가 호출될 때 user를 반환하도록 설정합니다.
  • verify(userRepository).save(user): userRepository의 save 메소드가 호출되었는지 확인합니다.

5. 고급 테스트 기법

  • 슬라이스 테스트: 특정 기능만 테스트하기 위해 필요한 빈만 로드하는 테스트
  • 웹 테스트: 웹 계층을 테스트하기 위한 테스트 (MockMvc, WebTestClient)
  • 데이터베이스 테스트: 데이터베이스와의 상호작용을 테스트하기 위한 테스트 (H2, Embedded Database)

6. 테스트 커버리지

  • Jacoco: 테스트 커버리지를 측정하여 코드 품질을 향상시키는 도구

결론

JUnit과 Mockito를 활용하면 스프링 부트 애플리케이션의 품질을 높이고 안정적인 서비스를 제공할 수 있습니다. 다양한 테스트 유형과 고급 테스트 기법을 적절히 활용하여 효과적인 테스트를 수행하고, 지속적인 통합/지속적인 배포(CI/CD) 파이프라인에 통합하여 개발 생산성을 향상시킬 수 있습니다.

 

728x90
728x90

'SpringBoot 를 배워보자 > 9. 추가 기능' 카테고리의 다른 글

캐싱 (Spring Cache)  (0) 2024.09.29
스케줄링 (Spring Scheduling)  (0) 2024.09.29
AOP (Aspect Oriented Programming)  (0) 2024.09.29