[Spring JPA 실습 #3] 회원 기능 테스트
- 📚 Spring/Spring JPA 실습
- 2021. 3. 5. 00:54
package com.jpabook.service;
import com.jpabook.domain.Member;
import com.jpabook.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.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MemberServiceTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
//회원가입
@Test
public void save() throws Exception {
//given
Member member = new Member();
member.setName("kim");
//when
Long savedId = memberService.join(member);
//then : db에 저장한거와 해당 member와 같나 체크
assertEquals(member, memberRepository.findOne(savedId));
}
//중복회원 예외
@Test
public void duplicate() throws Exception {
}
}
실행해서 console 쿼리를 보면 insert문이 날라가지 않는다.
그 이유는 테스트케이스에 @Transactional가 붙으면 기본적으로 롤백을 하기 때문에 insert문이 날라가지 않는다.
insert문을 보기위해서는 해당 케이스에 @Rollback(value = false)을 붙이면 된다.
//회원가입
@Test
@Rollback(value = false)
public void save() throws Exception {
//given
Member member = new Member();
member.setName("kim");
//when
Long savedId = memberService.join(member);
//then : db에 저장한거와 해당 member와 같나 체크
assertEquals(member, memberRepository.findOne(savedId));
}
다른방법으로
아래와 같이 @Autowired EntityManager em; 를 추가해서 em.flush()를 날려준다.
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MemberServiceTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
@Autowired EntityManager em;
//회원가입
@Test
public void save() throws Exception {
//given
Member member = new Member();
member.setName("kim");
//when
Long savedId = memberService.join(member);
//then : db에 저장한거와 해당 member와 같나 체크
em.flush(); //db에 강제로 쿼리를 날린다.
assertEquals(member, memberRepository.findOne(savedId));
}
}
2. 중복회원 예외 테스트
//중복회원 예외
@Test(expected = IllegalStateException.class)
public void duplicate() throws Exception {
//given
Member member1 = new Member();
member1.setName("kim");
Member member2 = new Member();
member2.setName("kim");
//when
memberService.join(member1);
memberService.join(member2); //예외가 발생해야 한다!
//then
fail("예외가 발생해야 한다");
}
'📚 Spring > Spring JPA 실습' 카테고리의 다른 글
[Spring JPA 실습 #5] 주문 주문상품 엔티티 개발 (0) | 2021.03.06 |
---|---|
[Spring JPA 실습 #4] 상품(Item) Repository 개발 (0) | 2021.03.06 |
[Spring JPA 실습 #2] 회원가입 Repository (0) | 2021.03.05 |
[Spring JPA 실습 #1] 실습을 위한 도메인 설계 및 정의 (0) | 2021.03.04 |
엔티티 설계시 주의점 (0) | 2020.08.16 |