728x90
- 스프링 부트 Test 예제
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
@Rollback
public class OrderServiceTest {
@PersistenceContext
EntityManager em;
@Autowired OrderService orderService;
@Autowired OrderRepository orderRepository;
@Test
public void 상품주문() throws Exception {
//Given
Member member = createMember();
Item item = createBook("시골 JPA", 10000, 10); //이름, 가격, 재고
int orderCount = 2;
//When
Long orderId = orderService.order(member.getId(), item.getId(), orderCount);
//Then
Order getOrder = orderRepository.findOne(orderId);
assertEquals("상품 주문시 상태는 ORDER",OrderStatus.ORDER, getOrder.getStatus());
assertEquals("주문한 상품 종류 수가 정확해야 한다.",1, getOrder.getOrderItems().size());
assertEquals("주문 가격은 가격 * 수량이다.", 10000 * 2, getOrder.getTotalPrice());
assertEquals("주문 수량만큼 재고가 줄어야 한다.",8, item.getStockQuantity());
@Test(expected = NotEnoughStockException.class)
public void 상품주문_재고수량초과() throws Exception {
//...
}
}
@Test
public void 주문취소() {
//...
}
private Member createMember() {
Member member = new Member();
member.setName("회원1");
member.setAddress(new Address("서울", "강가", "123-123"));
em.persist(member);
return member;
}
private Book createBook(String name, int price, int stockQuantity) {
Book book = new Book();
book.setName(name);
book.setStockQuantity(stockQuantity);
book.setPrice(price);
em.persist(book);
return book;
}
}
- 상품주문이 정상 동작하는지 확인하는 예제 테스트 코드입니다.
- Given 절에서 테스트를 위한 회원과 상품을 만들고 When 절에서 실제 상품을 주문하고 Then 절에서 주문 가격이 올바른지, 주문 후 재고 수량이 정확히 줄었는지를 검증합니다.
- 맨위에 @Rollback 어노테이션을 설정함으로써 테스트 완료 후, 실제 DB에 변동사항이 입력되지 않도록 테스트 진행이 가능합니다.
- 예제 코드의 26번째 줄의 assertEquals 메소드는 인자값이 같을 때, true를 반환하고 아닐 시, false를 반환합니다. 이와 유사한 메소드는 아래 표에 정리하였습니다.
- assertArrayEquals(a, b) :
- 배열 A와 B가 일치함을 확인한다.
|
|
|
|
|
|
|
|
|
|
728x90
'Spring' 카테고리의 다른 글
스프링 시큐리티(Spring Security) 설정 (0) | 2022.02.17 |
---|---|
Spring 필드 주입 vs 생성자 주입(win) (0) | 2022.02.15 |
순수 Java에서 Spring으로의 첫 전환! (0) | 2022.02.15 |
(Spring DI) Appconfig를 활용한 가격정책을 DI로 구현 (0) | 2022.02.15 |
(SpringBoot) test code (0) | 2022.02.15 |