구글에서 개발한 JSON 파싱 라이브러리
객체 <-> JSON 문자열
서로 변환 시켜주는 역할
package com.springboot.test.service.impl;
import com.springboot.test.data.dao.dto.ProductResponseDto;
import com.springboot.test.data.entity.Product;
import com.springboot.test.data.repository.ProductRepository;
import com.springboot.test.data.service.impl.ProductServiceImpl;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.Optional;
import static org.mockito.Mockito.verify;
public class ProductServiceTest {
private ProductRepository productRepository = Mockito.mock(ProductRepository.class);
private ProductServiceImpl productService;
@BeforeEach
public void setUpTest(){
productService = new ProductServiceImpl(productRepository);
} // 초기화
@Test
void getProductTest(){
Product givenProduct = new Product();
givenProduct.setNumber(123L);
givenProduct.setName("펜");
givenProduct.setPrice(1000);
givenProduct.setStock(1234); // Given
Mockito.when(productRepository.findById(123L)).thenReturn(Optional.of(givenProduct));
ProductResponseDto productResponseDto = productService.getProduct(123L); // 동작 테스트
Assertions.assertEquals(productResponseDto.getNumber(),givenProduct.getNumber());
Assertions.assertEquals(productResponseDto.getName(),givenProduct.getName());
Assertions.assertEquals(productResponseDto.getPrice(),givenProduct.getPrice());
Assertions.assertEquals(productResponseDto.getStock(),givenProduct.getStock());
verify(productRepository).findById(123L);
}
}
단위 테스트를 위해 외부요인을 배제한다.
Mockito.mock()
메소드 사용해 ProductRepository 주입 후 초기화해준다.
Given-When-Then 패턴을 기반
테스트에 사용할 Product 엔티티 객체 생성
Mockito.when()
객체의 행동 설정
.thenReturn()
메소드를 실제 호출하며 리턴값 설정
any
특정 매개변수 전달을 설정하지 않고 메소드 실행만 확인
Assertions.assertEquals
JUnit 메소드로 두 값이 일치하는 지 확인
DB와 가장 가까운 레이어로 기본적인 쿼리 메소드를 사용할 수 있다.
save()
, findbyId()
등등...)의 테스트는 의미가 없다.@DataJpaTest
JPA 관련 설정만 로드해서 테스트 진행
테스트 코드가 종료될 시 자동으로 DB 롤백(@Tranactional 포함)
기본적으로 임베디드 DB 사용
Java Code Coverage
JUnit 테스트를 통해 코드가 얼마나 테스트 됐는지 Line과 Branch 기준으로 한 커버리지로 리포트하며 HTML, XML, CSV 같은 다양한 형식으로 리포트를 확인할 수 있다.
'코드 자체가 얼마나 실행되었느냐'를 수치로 확인할 수 있는 테스트 수준 확인 지표
따로 알게된 점
Lombok의 @Builder
어노테이션