Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Servlet
- Exception
- Android
- JPQL
- Greedy
- java
- Proxy
- Spring Boot
- AOP
- 김영한
- SpringBoot
- pointcut
- 인프런
- 스프링 핵심 기능
- 스프링 핵심 원리
- 백준
- transaction
- spring
- jpa
- 자바
- QueryDSL
- 그리디
- springdatajpa
- kotlin
- Thymeleaf
- 스프링
- JDBC
- http
- db
- 알고리즘
Archives
- Today
- Total
개발자되기 프로젝트
주문 기능 테스트 본문
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
'인프런 > [인프런] Springboot와 JPA활용 1' 카테고리의 다른 글
[웹 계층] 홈 화면과 레이아웃 (0) | 2021.08.06 |
---|---|
주문 검색기능 개발 (0) | 2021.08.06 |
주문 repository, Service (0) | 2021.08.06 |
주문 도메인 개발 (0) | 2021.08.06 |
상품 domain, repository, service개발 (0) | 2021.08.06 |
Comments