<aside> 📌 데이터 엑세스 계층에서의 테스트를 작성할 때에는 항상 DB의 상태를 테스트 실행 이전 상태로 되돌려 놓는 작업을 해야 한다.

</aside>

테스트 케이스의 경우 실행 순서가 보장되지 않는다. 또한 각각의 테스트는 독립적이기 때문에 서로에게 영향을 주어서도 안된다. 따라서 데이터 엑세스 계층에서 테스트를 작성할 때에는 DB를 테스트 이전 상태로 유지할 수 있도록 테스트 시 삽입,수정한 데이터들을 모두 삭제하는 작업이 필요하다.

package com.codestates.slice.repository.member;

import com.codestates.member.entity.Member;
import com.codestates.member.repository.MemberRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import static org.junit.jupiter.api.Assertions.*;

@DataJpaTest   
public class MemberRepositoryTest {
    @Autowired
    private MemberRepository memberRepository;  

    @Test
    public void saveMemberTest() {
        // given  
        Member member = new Member();
        member.setEmail("[email protected]");
        member.setName("홍길동");
        member.setPhone("010-1111-2222");

        // when 
        Member savedMember = memberRepository.save(member);

        // then  
        assertNotNull(savedMember); 
        assertTrue(member.getEmail().equals(savedMember.getEmail()));
        assertTrue(member.getName().equals(savedMember.getName()));
        assertTrue(member.getPhone().equals(savedMember.getPhone()));
    }
}

@DataJpaTest

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(DataJpaTestContextBootstrapper.class)
@ExtendWith(SpringExtension.class)
@OverrideAutoConfiguration(enabled =false)
@TypeExcludeFilters(DataJpaTypeExcludeFilter.class)
@Transactional
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@ImportAutoConfiguration
public@interface DataJpaTest {

}