[JPA] 테스트 코드

  • persist는 즉시 DB에 저장되지 않고 커밋되는 순간 insert 문으로 JPA 퍼시스턴스 컨텍스트를 가진 멤버 객체가 생성된다.
  • Transactional : 롤백으로 인해 커밋 후 DB 결과를 볼 수 있음

1. @롤백(거짓) – 헌신적인

@RunWith(SpringRunner.class)    // 순수 단위테스트가 아닌 DB까지 JPA가 돌아가는 과정을 테스트하기 위함
@SpringBootTest
@Transactional
public class MemberServiceTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

    @Test
    @Rollback(false)
    public void 회원가입() throws Exception {
        //given
        Member member = new Member();
        member.setName("kim");

        //when
        Long joinedId = memberService.join(member);

        //then
        assertEquals(member, memberRepository.findOne(joinedId));
    }
 }

2. em.flush(); – Insert DB는 반영되나 초기화됨

@RunWith(SpringRunner.class)    // 순수 단위테스트가 아닌 DB까지 JPA가 돌아가는 과정을 테스트하기 위함
@SpringBootTest
@Transactional
public class MemberServiceTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;
    @Autowired EntityManager em;

    @Test
    public void 회원가입() throws Exception {
        //given
        Member member = new Member();
        member.setName("kim");

        //when
        Long joinedId = memberService.join(member);

        //then
        em.flush();
        assertEquals(member, memberRepository.findOne(joinedId));
    }
 }

인프라 실습! Spring Boot 및 JPA 1 사용 – 회원 서비스 테스트