나를 기록하다
article thumbnail
반응형

1. 에러 내용

1.1. 1) 발생

에러 발생. NullPointerException


1.2. 2) 원인

<code />
package jpabook.jpashop.service; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.domain.item.Book; import jpabook.jpashop.repository.OrderRepository; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import static org.junit.Assert.*; @SpringBootTest @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-123")); em.persist(member); Book book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); int orderCount = 2; //when Long orderId = orderService.order(member.getId(), book.getId(), orderCount); //then Order getOrder = orderRepository.findOne(orderId); assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER, getOrder.getStatus()); } @Test public void 주문취소() throws Exception { //given //when //then } @Test public void 상품주문_재고수량초과() throws Exception { //given //when //then } }

위 코드에서 import org.junit.Test; 이 부분이 에러의 원인이다.

위 코드 대신 import org.junit.jupiter.api.Test; 이 코드로 수정하면 제대로 동작한다.


1.3. 3) 해결

<code />
package jpabook.jpashop.service; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.domain.item.Book; import jpabook.jpashop.repository.OrderRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import static org.junit.Assert.*; @SpringBootTest @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-123")); em.persist(member); Book book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); int orderCount = 2; //when Long orderId = orderService.order(member.getId(), book.getId(), orderCount); //then Order getOrder = orderRepository.findOne(orderId); assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER, getOrder.getStatus()); } @Test public void 주문취소() throws Exception { //given //when //then } @Test public void 상품주문_재고수량초과() throws Exception { //given //when //then } }

에러없이 모든 테스트 케이스 정상 동작

코드를 변경 후 테스트가 모두 정상적으로 수행됨을 알 수 있다.

 

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!