Spring boot

스프링부트 - 주문 기능 테스트 개발 학습내용

방구석 대학생 2021. 1. 31. 19:26

"인프런 - 실전! 스프링부트와 JPA 활용1 강의를 듣고 작성한 글 입니다."

www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1#

 

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

실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다. 초급

www.inflearn.com

 

 

진짜 좋은 테스트란?

주문 생성, 주문 취소, 핵심 재고 수량 검사(주문할 때 재고 수량을 초과 할 시 오류 발생) 와 같은 유효성 검증(validation logic) 테스트 등, 강의를 들으며 진행했던 테스트는 좋은 테스트 들이라고 볼 수 없다.

 

진짜 좋은 테스트는 DB 와 같은 의존성(dependency) 이나 스프링도 넣지 않고, 순수하게 메소드 자체만 단위 테스트를 하는 것이다.

-> 하지만 여기서는 JPA 와 같은 것들이 엮여서 전체적으로 잘 동작하는지를 보려고 하기 때문에 통합적으로 테스트를 작성한다.

(사실 정말 좋은 테스트는 단위 테스트이다.)

 

기본 데이터 생성 시 사용하기 좋은 단축키?

Ctrl + alt + m 단축키를 활용하면 아래와 같은 기본 데이터 생성 코드를 하나의 메소드로 간단히 줄여줄 수 있다.

- OrderServiceTest.java(단축키 사용 전)

Member member = new Member();
member.setName("회원1");
member.setAddress(new Address("서울", "강가", "123-123"));
em.persist(member);

위와 같은 생성 메소드를 단축키를 활용하면 간편하게 하나의 메소드로 만들어 줄 수 있다.

- OrderServiceTest.java (단축키 사용 후)

Member member = createMember();

private Member createMember(){ // 단축키를 활용해 메소드를 간편하게 생성하였다.
    Member member = new Member();
    member.setName("회원1");
    member.setAddress(new Address("서울", "강가", "123-123"));
    em.persist(member);
    return member;
}

 

또한 Ctrl + alt + p 단축키를 활용하면 생성 메소드 내부에서 Setter 메소드에 작성되어 있는 데이터 값을 파라미터화 할 수 있다.

- OrderServiceTest.java(단축키 사용 전)

Book book = createBook();

private Book createBook() {
    Book book = new Book();
    book.setName("시골 JPA");
    book.setPrice(10000);
    book.setStockQuantity(10);
    em.persist(book);
    return book;
}

- OrderServiceTest.java(단축키 사용 후)

Book book = createBook("시골 JPA", 10000, 10);

private Book createBook(String name, int price, int stockQuantity) {
    Book book = new Book();
    book.setName(name); // 각 setter 에 있는 데이터마다
    book.setPrice(price); // 단축키를 활용해주면
    book.setStockQuantity(stockQuantity); // 간편하게 메소드 파라미터화 해 줄수 있다.
    em.persist(book);
    return book;
}

 

 

도메인 모델 패턴을 사용할 시 장점?

- Repository 와는 관계없이 그냥 Order 와 같은 각 객체 Entity 에 대해서 바로 테스트 작성을 할 수 있다.

- 각 단위 별 테스트(각 메소드가 잘 동작하는지 테스트 하는것) 가 정말 좋은 테스트이다.

- 지금까지 한 테스트는 JPA 와 스프링 부트가 통합적으로 같이 잘 동작하는지 테스트 해보는데 의미가 있다.