-
Notifications
You must be signed in to change notification settings - Fork 14
Description
본문에서 커버한 productAddTest() 외의 나머지 메서드들에 대한 테스트코드들을 아래와 같이 작성후 모든 검증을 완료하였습니다. 개선사항이나 좋은 의견 또는 조언을 환영합니다.
`package com.heeju.product_management.application;
import com.heeju.product_management.domain.Product;
import com.heeju.product_management.domain.ProductRepository;
import com.heeju.product_management.presentation.ProductDto;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static org.mockito.Mockito.;
import static org.junit.jupiter.api.Assertions.;
@ExtendWith(MockitoExtension.class)
public class SimpleProductServiceUnitTest {
@Mock
private ProductRepository productRepository;
@Mock
private ValidationService validationService;
@InjectMocks
private SimpleProductService simpleProductService;
@Test
@DisplayName("After adding a product, the added product must be returned in process")
void productAddTest(){
// Given
ProductDto productDto = new ProductDto("pencil", 300, 20);
Long PRODUCT_ID = 1L;
Product product = ProductDto.toEntity(productDto);
product.setId(PRODUCT_ID);
when(productRepository.add(any())).thenReturn(product);
// When
ProductDto savedProductDto = simpleProductService.add(productDto);
// Then
assertTrue(savedProductDto.getId().equals(PRODUCT_ID));
assertTrue(savedProductDto.getName().equals(productDto.getName()));
assertTrue(savedProductDto.getPrice().equals(productDto.getPrice()));
assertTrue(savedProductDto.getAmount().equals(productDto.getAmount()));
}
@Test
@DisplayName("FindByIdTest, product must be returned in process")
void findByIdTest(){
// Given
ProductDto productDto = new ProductDto(1L,"eraser", 200, 30);
Long PRODUCT_ID = 1L;
Product product = ProductDto.toEntity(productDto);
when(productRepository.findById(PRODUCT_ID)).thenReturn(product);
// When
ProductDto savedProductDto = simpleProductService.findById(PRODUCT_ID);
// Then
assertTrue(savedProductDto.getId().equals(PRODUCT_ID));
assertTrue(savedProductDto.getName().equals(productDto.getName()));
assertTrue(savedProductDto.getPrice().equals(productDto.getPrice()));
assertTrue(savedProductDto.getAmount().equals(productDto.getAmount()));
}
@Test
@DisplayName("FindAll test, products must be returned in process")
void findAllTest(){
// Given
List<Product> products = new ArrayList<>();
products.add(new Product(1L, "pencil", 200, 10));
products.add(new Product(2L, "eraser", 300, 20));
products.add(new Product(3L, "note", 400, 30));
when(productRepository.findAll()).thenReturn(products);
// When
List<ProductDto> productDtos = simpleProductService.findAll();
// Then
assertEquals(products.size(), productDtos.size(), "both size should be equal");
for (int i = 0; i < products.size(); i++) {
Product expectedProduct = products.get(i);
ProductDto expectedProductDto = productDtos.get(i);
assertEquals(expectedProduct.getId(), expectedProductDto.getId(), "Ids should be equal");
assertEquals(expectedProduct.getName(), expectedProductDto.getName(),"Names should be equal");
assertEquals(expectedProduct.getPrice(), expectedProductDto.getPrice(),"Prices should be equal");
assertEquals(expectedProduct.getAmount(), expectedProductDto.getAmount(),"Amounts should be equal");
}
}
@Test
@DisplayName("FindByNameContaining test, product must be returned in process")
void findByNameContaining(){
// Given
List<Product> products = new ArrayList<>();
String name = "pen";
products.add(new Product(1L, "pencil", 200, 10));
products.add(new Product(2L, "eraser", 300, 20));
products.add(new Product(3L, "pen", 400, 30));
products.add(new Product(4L, "note", 500, 40));
List<Product> filteredByNameProducts = products.stream()
.filter(product -> product.containsName(name))
.collect(Collectors.toList());
when(productRepository.findByNameContaining(any())).thenReturn(filteredByNameProducts);
// When
List<ProductDto> filteredByNameProductDtos = simpleProductService.findByNameContaining(name);
// Then
for (int i = 0; i < filteredByNameProductDtos.size(); i++) {
Product expectedProduct= filteredByNameProducts.get(i);
ProductDto expectedProductDto = filteredByNameProductDtos.get(i);
assertEquals(expectedProduct.getName(), expectedProductDto.getName(),"Names should be equal");
}
}
@Test
@DisplayName("Update test, product must be returned in process")
void update(){
// Given
Product originalProduct = new Product(1L, "pencil", 200, 10);
ProductDto productDto = new ProductDto(1L, "pencil", 500, 40);
Product product = ProductDto.toEntity(productDto);
if(product.getId().equals(originalProduct.getId())) originalProduct = product;
when(productRepository.update(product)).thenReturn(originalProduct);
// When
ProductDto updatedProductDto = simpleProductService.update(productDto);
// Then
assertTrue(updatedProductDto.getId().equals(product.getId()));
assertTrue(updatedProductDto.getName().equals(product.getName()));
assertTrue(updatedProductDto.getPrice().equals(product.getPrice()));
assertTrue(updatedProductDto.getAmount().equals(product.getAmount()));
}
@Test
@DisplayName("Delete test")
void deleteTest(){
Long id = 1L;
simpleProductService.delete(id);
}
}`