Spring/프로젝트 관련
[TEST 테스트] 테스트 파일
김긍수
2021. 4. 10. 04:31
1. 레포지토리 메소드를 작성한 후 Ctrl + Shift + T를 누르고 테스트 파일을 생성할 수 있다.
package study.datajpa.repository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.datajpa.Entity.Member;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@Transactional
@Rollback(false)
class MemberJpaRepositoryTest {
@Autowired
MemberJpaRepository memberJpaRepository;
@Test
public void testMember() {
Member member = new Member("memberA");
Member savedMember = memberJpaRepository.save(member);
Member findMember = memberJpaRepository.find(savedMember.getId());
//검증
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
}
}
JPA 데이터 변경은 반드시 트랜잭션안에서 실행되어야한다. 따라서 @Transactional 어노테이션을 붙여준다.
해당 테스트파일을 실행하면 트랜잭션이 실행된 후, 끝나면 다시 롤백을 해서 변경된 내역을 확인할 수 없다.
보고 싶다면, @Rollback(false)를 추가하면 된다. 이것은 롤백을 안하고 커밋을 해주는 것이다.
추가한 후 실행해보면 로그에 실행된 sql문이 보인다. 또 롤백을 하지않고 커밋을 한 것이므로 데이터베이스에서 추가된 데이터를 확인할 수 있다.
1. em.flush() : em.persist()할때 데이터베이스에 쿼리를 바로 보내지 않는다. JPA영속성컨텍스트에 저장하는데, flush()하면 강제로 쿼리를 보낸다.
2. em.clear() : 쿼리도 날리고 JPA영속성컨텍스트를 초기화한다.