슬라이스 테스트 - Data Access 계층

jungseo·2023년 6월 29일
0

Spring

목록 보기
15/23

Data Access 계층

  • DB의 상태를 테스트 케이스 실행 이전으로 되돌려서 깨끗하게 만들어야 함
    • 각 테스트 케이스가 순서에 상관없이 서로 영향을 주지 않도록 하기 위함

1. saveMemberTest

import java.util.Optional;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

@DataJpaTest // (1)
public class MemberRepositoryTest {
    @Autowired // (2)
    private MemberRepository memberRepository;

    @Test
    public void saveMemberTest() {
        // given
        Member member = new Member();
        member.setEmail("hgd@gmail.com");
        member.setName("홍길동");
        member.setPhone("010-1111-2222");

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

        // then // (3)
        assertNotNull(savedMember);
        assertTrue(member.getEmail().equals(savedMember.getEmail()));
        assertTrue(member.getName().equals(savedMember.getName()));
        assertTrue(member.getPhone().equals(savedMember.getPhone()));
    }
}
  • (1) @DataJpaTest

    • Repository의 기능을 테스트하기 위한 Configuration을 Spring이 설정
    • 데이터 엑세스 계층에 필요한 자동 구성을 활성화
    • @Transactional을 포함하고 있어 테스트 케이스가 종료될 때 마다 rollback
  • (2) 테스트 대상 MemberRepository DI

  • (3) 검증

2. findByEmailTest

import java.util.Optional;

import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

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

    @Test
    public void findByEmailTest() {
        // given
        Member member = new Member();
        member.setEmail("hgd@gmail.com");
        member.setName("홍길동");
        member.setPhone("010-1111-2222");


        // when
        memberRepository.save(member);
        Optional<Member> findMember = memberRepository.findByEmail(member.getEmail());

        // then
        assertTrue(findMember.isPresent());
        assertTrue(findMember.get().getEmail().equals(member.getEmail()));
    }
}

0개의 댓글