Java Spring 테스트 코드

BackEnd_Ash.log·2023년 7월 19일
0

자바스터디

목록 보기
14/19

Java에서 단위 테스트를 작성할 때 JUnit과 Mockito를 주로 사용합니다.
TDD(Test Driven Development) 방식을 사용할 때는 테스트 코드를 먼저 작성하고, 그 다음에 기능을 개발합니다. 그래서 실패하는 테스트 코드를 먼저 작성하고, 그 테스트를 통과하는 기능을 개발하는 것이 일반적입니다.

아래는 해당 메서드에 대한 기본적인 JUnit 테스트입니다.
이 테스트는 정상적인 경우를 가정하고 있으며, 제품이 존재하고 그에 대한 정보가 정확히 반환되는지를 확인합니다:

    @Test
    public void testFindOneProductById() {
        // given

        Product mockProduct = new Product();
        mockProduct.setId(1L);
        mockProduct.setName("Test product");
        mockProduct.setImg("Test image");
        mockProduct.setPrice(100L);
        Mockito.when(productRepository.findById(Mockito.anyLong())).thenReturn(Optional.of(mockProduct));

        // When
        FindProductResponseDto response = productService.findProductOneById(1L);

        // Then
        Assertions.assertEquals(mockProduct.getName(), response.getName());
        Assertions.assertEquals(mockProduct.getImg(), response.getImg());
        Assertions.assertEquals(mockProduct.getPrice(), response.getPrice());
    }

    @Test
    public void FindAllProduct() {

// Given
        Product mockProduct1 = new Product();
        mockProduct1.setId(1L);
        mockProduct1.setName("Test product 1");
        mockProduct1.setImg("Test image 1");
        mockProduct1.setPrice(100L);

        Product mockProduct2 = new Product();
        mockProduct2.setId(2L);
        mockProduct2.setName("Test product 2");
        mockProduct2.setImg("Test image 2");
        mockProduct2.setPrice(200L);

        List<Product> mockProducts = Arrays.asList(mockProduct1, mockProduct2);
        Mockito.when(productRepository.findAll()).thenReturn(mockProducts);

        // When
        List<Product> products = productRepository.findAll();

        // Then
        Assertions.assertEquals(2, products.size());
        Assertions.assertEquals(mockProduct1, products.get(0));
        Assertions.assertEquals(mockProduct2, products.get(1));
    }

    }

findProductOneById 메서드를 테스트하므로, productRepository.findById(id)가 호출되면 원하는 Product 객체를 반환하도록 mock 설정을 해야 합니다.

이후 기능 개발 코드를 작성한다.

@Service
@AllArgsConstructor
public class ProductService {
    private final IProductRepository productRepository;

    public FindProductOneResponseDto findProductOneById(
            Long id
    ) {
        System.out.println("상품 조회 요청: " + id);
        Product findProduct = productRepository.findById(id)
                .orElseThrow(() -> new HttpException("존재하지 않는 상품입니다.", HttpStatus.NOT_FOUND));

        FindProductOneResponseDto findProductOneResponseDto = new FindProductOneResponseDto();
        findProductOneResponseDto.setName(findProduct.getName());
        findProductOneResponseDto.setImg(findProduct.getImg());
        findProductOneResponseDto.setPrice(findProduct.getPrice());

        return findProductOneResponseDto;
    }

    public FindProductResponseDto findProduct() {
        System.out.println("상품 목록 조회 요청");
        FindProductResponseDto findProductResponseDto = new FindProductResponseDto();
        findProductResponseDto.setProducts(productRepository.findAll());

        return findProductResponseDto;
    }
profile
꾸준함이란 ... ?

0개의 댓글