실전! 스프링 부트와 JPA 활용1(웹 애플리케이션 개발)

Ch05. 상품 도메인 개발 - 상품 Service 개발

webmaster 2021. 12. 5. 18:38
728x90

ItemService

  • 기존에 작성했던 Service코드와 비슷하다.
    • 사실상 Repository에 기능을 위임만 하기 때문에 Service가 필요 없음
    • 바로, Repository에 접근하여 해당 기능을 사용해도 된다.
  • saveItem 메서드
    • 저장 기능
  • findItems 메서드
    • 모든 Item 조회
  • findOne 메서드
    • 하나의 Item 조회

Test

강의의 내용이 너무 짧아 혼자 테스트 케이스를 작성해 보았다.

@SpringBootTest
@Transactional
class ItemServiceTest {
    @Autowired
    ItemService itemService;
    @Autowired
    ItemRepository itemRepository;
    
    @Test
    @Rollback(value = false)
    public void 아이템_저장() throws Exception{
        //given
        Item book = new Book();

        //when
        itemService.saveItem(book);

        //then
        assertEquals(book,itemRepository.findOne(book.getId()));
    }

    @Test
    @Rollback(value = false)
    public void 아이템_저장_업데이트() throws Exception{
        //given
        Item book = new Book();

        //when
        itemService.saveItem(book);
        book.addStock(200);
        itemService.saveItem(book);

        //then
        assertEquals(book,itemRepository.findOne(book.getId()));
        assertEquals(book.getStockQuantity(),itemRepository.findOne(book.getId()).getStockQuantity());
    }
     @Test
    public void 에러_발생() throws Exception{
        //given
        Item item = new Book();
        item.addStock(5000);
        //when
        
        //then
        assertThrows(NotEnoughStockException.class,() ->item.removeStock(6000));//에러 발생
    }
}
  • TDD 연습
  • 아이템_저장 메서드
    • 실제 Save시 Insert가 되는지 테스트
    • Rollback을 false로 설정하여 실제 Insert 쿼리가 잘 실행되는지 확인해 보았다.
  • 아이템_저장_업데이트 메서드
    • merge가 잘 동작되는지를 확인하기 위한 테스트
    • Book을 생성하여 영속화를 한 뒤, 해당 데이터를 가지고 다시 실행하게 된다면 기존에 영속화가 되어있던 데이터로 id값이 있어 merge를 타게 된다.
      • update문이 잘 실행된다.
  • 에러_발생 메서드
    • 처음 재고 값을 5000으로 세팅한 뒤, removeStock 비즈니스 메서드를 실행시켜 에러가 잘 동작하는지 확인한다.
728x90