• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

테스트 코드 오류

23.03.06 08:10 작성 조회수 1.11k

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

id to load is required for loading; nested exception is java.lang.IllegalArgumentException: id to load is required for loading 오류 발생합니다

Long orderId 값이 null 값이여서 오류가 납니다. 왜 null값이 들어가는지 이해가 안됩니다.

 

class OrderServiceTest {
    @Autowired EntityManager em;
    @Autowired OrderService orderService;

    @Autowired OrderRepository orderRepository;
    @Test
    public void 상품주문() throws Exception{
        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;

        Long orderId = orderService.order(member.getId(), book.getId(), orderCount);
       
        Order getOrder = orderRepository.findOne(orderId);

        assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER,getOrder.getStatus());

    }
    @Test
    public void 주문취소() throws Exception{

    }
    @Test
    public void 상품주문_재고수량초과() throws Exception{

    }



}

 

답변 2

·

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.03.06

안녕하세요, 강용규 님. 공식 서포터즈 y2gcoder 입니다.

보내주신 코드 받아서 디버깅해보았습니다.

말씀하신 대로

Long orderId = orderService.order(member.getId(), book.getId(), orderCount);

해당 부분에서 orderId를 null로 반환해주는 현상을 확인했습니다.

이를 바탕으로 계속 디버깅하여 문제를 찾아본 결과 OrderRepository 에 제대로 코드 구현이 되어있지 않았습니다.

image

강의자료의 코드는 다음과 같습니다.

@Repository
@RequiredArgsConstructor
public class OrderRepository {
    private final EntityManager em;

    public void save(Order order) {
        em.persist(order);
    }

    public Order findOne(Long id) {
        return em.find(Order.class, id);
    }
    
//    public List<Order> findAll(OrderSearch orderSearch) {}
}

보내주신 코드를 보시면 실제로 db에 저장되지 않고 있기 때문에 orderId는 당연히 null이고

findOne(Long id)에 null이 들어가기 때문에 정상적인 로직 수행을 하지 못하게 되는 것으로 보입니다.

그래서 OrderRepository를 수정한 후 다시 테스트해보시면 아래 사진처럼 통과하게 됩니다.

image

감사합니다.

강용규님의 프로필

강용규

질문자

2023.03.06

감사합니다. 빠른 피드백 덕분에 문제를 해결할 수 있게되어서 감사드립니다.

y2gcoder님의 프로필

y2gcoder

2023.03.06

파이팅입니다!

0

y2gcoder님의 프로필

y2gcoder

2023.03.06

안녕하세요. 강용규님, 공식 서포터즈 {}입니다.

말씀하신 부분만으로는 문제 파악이 어렵습니다. 그나마 예상할 수 있는 것은 Order 엔티티를 저장하는 부분에서 문제가 있거나, Order 엔티티를 조회하는 부분에서 문제가 있다는 정도입니다.

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

구글 드라이브 업로드 방법 링크

주의: 업로드시 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

강용규님의 프로필

강용규

질문자

2023.03.06

 

https://drive.google.com/drive/folders/1XmcFsJsEP2O6dKqTvKF7f-WCIMVAH3VV?usp=sharing

링크 입니다.

intellij 에서 테스트 코드를 만들고 상품 주문 메서드 실행 시 오류가 납니다. 오류가 난 부분은 Order getOrder = orderRepository.findOne(orderId);

인데 ,원인은 orderId가 null 값으로 나와 그런거 같습니다.