- 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 사용 – 회원 서비스 테스트