Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

주문 기능 테스트 본문

인프런/[인프런] Springboot와 JPA활용 1

주문 기능 테스트

Seung__ 2021. 8. 6. 14:38

1. 테스트 요구사항


  • 상품 주문이 성공해야 한다.
  • 상품을 주문할 때 재고 수량을 초과하면 안 된다.
  • 주문 취소가 성공해야 한다

 

 

2. 상품 주문 테스트


@SpringBootTest
@RunWith(SpringRunner.class)
@Transactional
public class OrderServiceTest {

    @Autowired
    EntityManager em;
    @Autowired
    OrderService orderService;
    @Autowired
    OrderRepository orderRepository;

    @Test
    public void 상품주문() throws Exception{
        //given
        Member member = new Member();
        member.setName("회원1");
        member.setAddress(new Address("서울", "송파", "123-12"));
        em.persist(member);

        Item book  = new Book();
        book.setName("JPAㅎㅎ");
        book.setPrice(10000);
        book.setStockQuantity(10);
        em.persist(book);


        //when
        int orderCount = 2;
        Long orderId = orderService.order(member.getId(), book.getId(), orderCount);


        //then
        Order getOrder = orderRepository.findOne(orderId);

        
        assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER, getOrder.getStatus());
        assertEquals("주문한 상품 종류 수 가 정확해야함.", 1, getOrder.getOrderItems().size());
        assertEquals("주문 가격은 가격*수량.", 10000*orderCount, getOrder.getTotalPrice());
        assertEquals("수문수량 만큼 재고 감소.", 10-orderCount, book.getStockQuantity());
        
    }

 

테스트 결과
- InvalidDataAccessApiUsageException 발생.
- id to load is required for loading
- OrderService에서 itemId로 엔티티 조회시 에러 발생.
- 앗... test에서 item을 persist안해줬음.. ㅎ

em.persist(book);​

ㅎㅎ.....

 

 

3. 상품 주문 수량이 재고수량 초과


  • @Test(expected = type) 사용
  • 주문 수량이 재고수량보다 초과하는 경우 NotEnooughStockException이 발생해야한다.
    @Test(expected = NotEnoughStockException.class)
    public void 상품주문_재고수량초과() throws Exception{
        //given
        Member member = createMember();
        Item book = createBook("JPAㅎㅎ",10000,  10);

        int orderCount = 11;

        //when
        orderService.order(member.getId(), book.getId(), orderCount);

        //then
        fail("재고 수량 부족 에러가 발생해야 한다.");

    }

 

 

 

4. 주문 취소 


  @Test
    public void 주문취소() throws Exception{
        //given
        Member member = createMember();
        Item book = createBook("jpa", 10000, 10);
        int orderCount = 2;
        Long orderId = orderService.order(member.getId(), book.getId(), orderCount);

        //when
        orderService.cancelOrder(orderId);

        //then
        Order getOrder = orderRepository.findOne(orderId);
        assertEquals("주문 취소시 상태는 CANCEL", OrderStatus.CANCEL, getOrder.getStatus());
        assertEquals("재고 원복", 10, book.getStockQuantity());
        

    }

 

 

5. 좋은 테스트


  • 스프링 ,DB안끼고 최대한 단위테스트로 작성해야함.
  • 도메인 모델 패턴을 사용하면 도메인이 잘 작동하는지 단위 테스트 가능.

 

6. GitHub : 210806 Order Test


 

GitHub - bsh6463/SpringBootJPA1

Contribute to bsh6463/SpringBootJPA1 development by creating an account on GitHub.

github.com

 

Comments