반응형
    
    
    
  JUnit5, AssertJ, Mockito 를 활용해서 스프링 부트에서 테스트 환경을 구축해보자
의존성 추가
아래를 참고하여 의존성을 추가한다.
각 의존성에 대한 버전은 최신 버전으로 추가해주면 될 듯하다.
dependencies {
    // JUnit 라이브러리
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testImplementation("org.junit.jupiter:junit-jupiter-params")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
    
    // 테스트 코드의 가독성을 높여주는 메소드를 위한 라이브러리
    testImplementation("org.assertj:assertj-core")
    
    // 테스트에 필요한 Mock 객체 생성을 위한 라이브러리
    testImplementation("org.mockito:mockito-core")
    testImplementation("org.mockito:mockito-junit-jupiter")
}테스트 대상 선정
테스트를 수행하려는 클래스에 가서 (MacOS 기준) "Command + Shift + T" 를 클릭한다. "Create New Test..." 라는 콘솔이 나오면 클릭한다.

Testing library 가 JUnit5 로 설정되어 있지 않으면 맞춰주고, OK 를 클릭한다.

테스트 작성
- @Mock 어노테이션을 활용할 수 있도록 해주는 확장 모델
- @Mock 객체를 주입하기 위해 사용
- 테스트 대상이 되는 클래스 객체로 보통 "sut" 이라고 네이밍을 한다. (system under test)
- 사용되는 빈에 대해 Mock 처리를 한다.
- 사용되는 빈
- 각 테스트 이전에 실행되어야 하는 작업을 수행하기 위해 사용되는 어노테이션
- sut 초기화
- 테스트의 이름을 명확하게 설정
- 테스트 임을 명시
- 함수 이름은 항상 유의미하게 설정
- 테스트는 보통 given-when-then 순으로 작성되며 given 은 주어진 데이터/환경을 의미
- 실행되었을 때
- 결과 검증 단계
- .upsert(...) 메소드가 1번 실행되면 성공
@ExtendWith(MockitoExtension.class) // ... (1)
class BlogSearchServiceTest {
    @InjectMocks // ... (2)
    BlogSearchService sut; // ... (3)
    @Mock // ... (4)
    BlogPort blogPort; // ... (5)
    @Mock
    UpsertBlogStatisticsUseCase upsertBlogStatisticsUseCase;
    @Mock
    BlogDtoConverter blogDtoConverter;
    @BeforeEach // ... (6)
    void setup() {
        sut = new BlogSearchService(
                blogPort,
                upsertBlogStatisticsUseCase,
                blogDtoConverter
        ); // ... (7)
    }
    @DisplayName("블로그를 조회할 땐, 검색어를 저장한다.") // ... (8)
    @Test // ... (9)
    void saveKeywordWhenSearchingBlogs() { // ... (10)
        // given // ... (11)
        var command = BlogSearchCommand.builder()
        				.keyword("키워드")
        				.build();
        // when // ... (12)
        sut.search(command);
        // then // ... (13)
        verify(upsertBlogStatisticsUseCase, times(1))
                .upsert(any(UpsertBlogStatisticsCommand.class)); // (14)
    }반응형
    
    
    
  '스프링' 카테고리의 다른 글
| [스프링] REST Docs, asciidoctor 로 API 문서 관리하기 (0) | 2023.02.06 | 
|---|---|
| [스프링] JPA 관련 통합 테스트 환경 구축하기 (0) | 2023.02.06 | 
| [스프링] 스프링에서 관리하는 자바 객체, 빈 (Bean) (0) | 2023.02.03 | 
| [스프링] 프로그래밍 방식의 트랜잭션 관리 방법 (0) | 2023.02.03 | 
| [스프링] 스프링의 역사 (0) | 2023.02.02 | 
 
										
									 
										
									 
										
									
댓글