회원 기능 테스트

2023. 5. 10. 08:25카테고리 없음

package jpabook.jpashop.service;

import jakarta.persistence.EntityManager;
import jakarta.transaction.Transactional;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class) // Junit 실행할때 스프링이랑 엮어서 사용하는 것.
@SpringBootTest // 스프링 부트를 띄운 상태로 테스트를 하려면 필요.
@Transactional // 트랜젝션 걸고 테스트 시작하고 데이터를 롤백시켜줌.
public class MemberServiceTest {
    @Autowired MemberService memberService;
    @Autowired
    MemberRepository memberRepository;
//    @Autowired EntityManager em;

    @Test
//(expected = IllegalStateException.class)
//    try { //
//        memberService.join(member2);
//    } catch (IllegalStateException e) {
//        return;
//    }
    @Rollback(false)
    public void 회원가입() throws Exception {

        //Given
        Member member = new Member();
        member.setName("kim");

        //When
        Long saveId = memberService.join(member);

        //Then

        //em.flush();  join(member)에 member가 query로 db에 반영됨.
        assertEquals(member, memberRepository.findOne(saveId));
    }
    @Test(expected = IllegalStateException.class)
    public void 중복_회원_예외() throws Exception {

        //Given
        Member member1 = new Member();
        member1.setName("kim");
        Member member2 = new Member();
        member2.setName("kim");

        //When
        memberService.join(member1);
        memberService.join(member2);

//        try {
//            memberService.join(member2); //예외가 발생해야 한다.
//        } catch (IllegalStateException e) {
//            return;
//        }

        //Then
        fail("예외가 발생해야 한다.");
        //위에 코드가 쭉내려오지 않도록 걸어두는것. 이쪽에 오면 예외가 발생해야한다고.
    }
}
spring:
#  datasource:
#    url:  jdbc:h2:mem:test
#    username: sa
#    password:
#    driver-class-name : org.h2.Driver


#  jpa:
#    hibernate:
#      ddl-auto: create-drop
#    properties:
#      hibernate:
#        show_sql: true
#        format_sql: true

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

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

https://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/dashboard