μ€λλ μ€μ μ€ν ν νλ‘μ νΈλ₯Ό μ§ννμκ³ , μ₯λ°κ΅¬λ λ±λ‘κ³Ό μ₯λ°κ΅¬λ μ‘°νμ λν μ½λλ₯Ό 리ν©ν λ§ νλ ν루 μλ€.
mokito ν
μ€νΈ μ½λλ₯Ό μμ±νμκ³ , μ 리 ν΄λ³΄λ € ν©λλ€.@ExtendWith(MockitoExtension.class)
@Transactional
class CartServiceImplTest {
@Mock
private ItemCartRepository itemCartRepository;
@InjectMocks
private ItemCartServiceImpl itemCartService;
@DisplayName("μ μ μ μ₯λ°κ΅¬λ μ‘°ν νμΈ")
@Test
public void read_Member_Cart_ByUser() {
String findMemberName = "shin";
List<ItemCart> mockItemCartList = new ArrayList<>();
// Mockito.mock(μ¬μ©ν ν΄λμ€.class) -> κ°μ²΄ μμ±, μμ‘΄μ± μ£Όμ
ItemCart mockItemCart = Mockito.mock(ItemCart.class);
Cart mockCart = Mockito.mock(Cart.class);
Member mockMember = Mockito.mock(Member.class);
Product mockProduct = Mockito.mock(Product.class);
// .thenReturn() -> λ°ννλ κ°μ μ§μ
when(mockItemCart.getProduct()).thenReturn(mockProduct);
when(mockItemCart.getCart()).thenReturn(mockCart);
when(mockCart.getMember()).thenReturn(mockMember);
when(mockMember.getUsername()).thenReturn(findMemberName);
when(mockProduct.getProductName()).thenReturn("κ°μμ§ κ°μ");
when(mockProduct.getPrice()).thenReturn("25_000");
when(mockItemCart.getStackCount()).thenReturn(3);
// λͺ¨μ κ°μ²΄λ₯Ό 리μ€νΈμ μΆκ°
mockItemCartList.add(mockItemCart);
// itemCartRepository.findAll() νΈμΆ μ λͺ¨μ κ°μ²΄ 리μ€νΈ λ°ννλλ‘ μ€μ
when(itemCartRepository.findAll()).thenReturn(mockItemCartList);
List<ViewCartResponse> result =
itemCartService.readMemberCartByUser(findMemberName);
assertThat(1).isEqualTo(result.size());
ViewCartResponse viewCartResponse = result.get(0);
assertThat("κ°μμ§ κ°μ")
.isEqualTo(viewCartResponse.getProductName());
assertThat("25_000").isEqualTo(viewCartResponse.getPrice());
Assertions.assertThat(3).isEqualTo(viewCartResponse.getCount());
}
}
μ°κ΄κ΄κ³λ‘ μ½ν μμ΄ μ‘°κΈ λ³΅μ‘ν΄ λ³΄μ΄λ μ½λ μ΄μ§λ§, mokito λ©μλλ₯Ό μ€μ¬μΌλ‘ μμ± νκ² μ΅λλ€.
Mockito.mock(μ¬μ©ν ν΄λμ€.class): μ¬μ©ν ν΄λμ€ κ°μ²΄λ₯Ό μ§μ μμ±νμ§ μκ³ , κ°μ§ (Mock) κ°μ²΄λ₯Ό μ£Όμ
when().thenReturn():whenμ μ λ©μλκ° νΈμΆ λ λthenReturnμ μ κ°μ²΄λ₯Ό λ°ννλλ‘ μ§μ
μ± GPTμ μ§μμλ΅μ νλ©°, Mock ν
μ€νΈλ₯Ό μμ± νμλλ°, Mock ν
μ€νΈλ₯Ό μ ν΄μΌλλμ§, μ΄λ ν κ²½μ°μ μ¬μ©νλ©΄ μ’μμ§λ μλ©΄ μ’μ κ² κ°λ€.
(Mock ν
μ€νΈ μ½λκ° μμ§μ μμ μ μ΅λ κ² κ°λ€.)
β‘ findItemCart κ° null μ΄λΌλ κ²μ, μ₯λ°κ΅¬λμ λ±λ‘λ μνμ΄ μλ€. μ¦ μ₯λ°κ΅¬λκ° λΉμ΄ μλ€.
λ¬Όλ‘ μλμ κ°μ΄ if λ¬Έμ 2λ² μ¬μ©νμ¬ μ½λλ₯Ό μμ± ν΄λ λμ§λ§, μ λ 리ν©ν λ§ λΆλΆμ΄λΌκ³ μκ°νκ² λμμ΅λλ€.
(else μμ½μ΄λ μ¬μ©μ μ§μ νλ€)
public void addProductByCart(Cart cart, Long productId,
ProductCountRequest productCountRequest) {
ItemCart findItemCart = itemCartRepository
.findByCartIdAndProductId(cart.getId(), productId);
if (findItemCart == null) {
addToCartForNewProduct(cart, productId, productCountRequest);
}
if(findItemCart != null){
addToCartForExistingProduct(findItemCart, cart,
productCountRequest);
}
}
μ½λλ₯Ό κ³ μ³κ°λ©° μ¬λ¬ μν μ°©μ€κ° μμμ§λ§, μλμ μ½λκ° κ°μ₯ κΉλνκ³ κ°κ²° νλ€κ³ μκ°νμ¬ μμ±νμμ΅λλ€.
ifλ¬Έμ 쑰건μ΄λΌλ©΄ returnμ ν κ²μ΄κ³ , null μ΄ μλλΌλ©΄ ifλ¬Έ λ°κΉ₯μ λ‘μ§μ΄ μ€ν λ κ² μ΄λ€.
if (findItemCart == null) {
addToCartForNewProduct(cart, productId, productCountRequest);
return;
}
addToCartForExistingProduct(findItemCart, cart,
productCountRequest);
β‘ μλ‘μ΄ μνμ μ₯λ°κ΅¬λμ λ΄μμΌ ν¨μΌλ‘, save() λ©μλλ₯Ό λ‘μ§μ μΆκ° μμΌμΌ νλ©°, μ₯λ°κ΅¬λμ μ°κ΄λ κ°μ²΄λ₯Ό μ μ₯ ν΄μ€μΌ ν©λλ€.
(EX : μ₯λ°κ΅¬λμ μνμ μ°κ΄κ΄κ³ λ±)
private void addToCartForNewProduct(Cart cart, Long productId,
ProductCountRequest productCountRequest) {
Product product = productService.getProduct(productId);
cart.addCount(productCountRequest.getCount());
ItemCart newItemCart = ItemCart
.createItemCart(cart, product, productCountRequest.getCount());
newItemCart.removeStock(product, productCountRequest.getCount());
itemCartRepository.save(newItemCart);
}
β‘ κ°λ¨ν μ€λͺ
νμ¬, μ₯λ°κ΅¬λμ μ΄λ―Έ λκ°μ μνμ΄ λ΄κ²¨μ Έ μμΌλ save() λ©μλλ‘ μ μ₯μ νμ§ μμλ λλ€λ μ μ
λλ€.
μ₯λ°κ΅¬λμ λ΄κ²¨μ Έ μλ μνμ find νμ¬ μ°Ύμ μνμ κ°―μλ§ add νλ©΄ λλ€λ κ² μ
λλ€.
private void addToCartForExistingProduct(ItemCart findItemCart, Cart cart,
ProductCountRequest productCountRequest) {
Product product = findItemCart.getProduct();
findItemCart.removeStock(product, productCountRequest.getCount());
cart.addCount(productCountRequest.getCount());
findItemCart.addCount(productCountRequest.getCount());
}
μ½λλ§ μ£Όκ΅¬ μ₯μ°½ μμ±νλ©΄μ μ 리 ν κ² κ°μ, λ¨Όκ° λ³΅μ‘ν΄ λ³΄μΈλ€. λ΄μΌμ ν€μλμ λν΄μ μ 리λ₯Ό ν΄μΌκ² λ€.