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영속성컨텍스트를 초기화한다.