ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 회원 가입, 조회 기능 테스트
    JPA/JPA 활용 2023. 7. 11. 18:09

    테스트코드에서 service의 기능들을 테스트해 볼 것이다.

    @RunWith(SpringRunner.class) // 스프링이랑 같이 엮어서 junit을 실행하는 것
    @SpringBootTest // 스프링부트를 띄운 상태로 테스트(이게 없으면 Autowired가 다 실패)
    @Transactional // 트랜잭션
    class MemberServiceTest {
    
        @Autowired MemberService memberService;
        @Autowired MemberRepository memberRepository;
    
        @Test
        public void 회원가입() throws Exception {
            // given
            Member member = new Member();
            member.setName("kim");
    
            // when
            Long savedId = memberService.join(member);
    
            // then
            // em.flush(); -> 롤백을 하지만 db에 쿼리를 날려서 insert문 보는 것
            Assert.assertEquals(member, memberRepository.findOne(savedId));
        }

    애노테이션과 회원가입의 테스트 메서드이다. 회원가입을 해서 name을 지정하고 Assert.assertEquals로 member와 repository에 저장되어있는 savedId로 조회한 member가 서로 동일하다는 것을 확인했다.

     

     

     

    @Test
        public void 중복_회원_예외() throws Exception {
            // given
            Member member1 = new Member();
            member1.setName("kim");
    
            Member member2 = new Member();
            member2.setName("kim");
    
            // when
            memberService.join(member1);
            try {
                memberService.join(member2); // 예외가 발생해야 한다
            } catch (IllegalStateException e) {
                return;
            }
    
            // then
            Assert.fail("예외가 발생해야 한다.");
        }
    }

    다음은 중복 회원이 있을 시에 예외처리를 해주는지 확인해주는 테스트 케이스이다. member1과 member2를 이름이 같게 만들고나서 join을 한 다음에 try-catch로 IllegalStateException 예외처리를 해준다.

     

     

    메모리에서 테스트 진행하기

    h2 데이터베이스를 끈 다음에도 메모리에서만 테스트를 진행하는 방법이 있다.

    spring:
      datasource:
        url: jdbc:h2:tcp://localhost/~/jpashop
        username: sa
        password:
        driver-class-name: org.h2.Driver
    
      jpa:
        hibernate:
          ddl-auto: create
        properties:
          hibernate:
            # show_sql: true
            format_sql: true
    logging.level:
      org.hibernate.SQL: debug
    # org.hibernate.type: trace #스프링 부트 2.x, hibernate5
    # org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6

    원래는 application.yml에서 url을 h2데이터베이스의 주소로 설정해두었는데, main의 application.yml이 아니라 test의 application.yml에서 저 url 주소를 jdbc:h2:mem:test(h2 페이지 참고)로 바꾸면 된다.

    spring:
    
    logging.level:
      org.hibernate.SQL: debug
      org.hibernate.type: trace

    스프링 부트는 다 생략을 해도 자동으로 메모리모드에서 테스트를 한다고 한다.

     

    main과 test의 application.yml을 분리해서 main에도 test에도 같은 application.yml 파일을 만드는 것이 좋다.

    'JPA > JPA 활용' 카테고리의 다른 글

    상품 리포지토리, 서비스 개발  (0) 2023.07.11
    상품 엔티티 개발(비즈니스 로직)  (0) 2023.07.11
    회원 리포지토리, 서비스 개발  (0) 2023.07.11
    엔티티 설계시 주의점  (0) 2023.07.11
    회원 도메인 개발  (0) 2023.07.11
Designed by Tistory.