Spring

스프링 부트 Test 예제(feat. assertj)

쿠카이든 2022. 2. 14. 12:25
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가 일치함을 확인한다.
  • assertEquals(a, b) : 
  • 객체 A와 B가 같은 값을 가지는지 확인한다.
  • assertSame(a, b) : 
  • 객체 A와 B가 같은 객체임을 확인한다.
  • assertTrue(a)
  • 조건 A가 참인지 확인한다.
  • assertNotNull(a) : 
  • 객채 A가 null이 아님을 확인한다.
  • assertEquals(a, b, c) :  
  • 객체 A와 B가 값이 일치함을 확인한다.( a: 예상값, b:결과값, c: 오차범위)
728x90