현재 데이터 액세스 계층에서 사용하고 있는 기술은 Spring Data JPA이며 Spring에서는 JPA에 대한 테스트를 쉽게 진행할 수 있는 몇 가지 방법들을 제공한다.
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 // (1)
public class MemberRepositoryTest {
@Autowired
private MemberRepository memberRepository; // (2)
@Test
public void saveMemberTest() {
// given (3)
Member member = new Member();
member.setEmail("mason@gmail.com");
member.setName("Mason");
member.setPhone("010-1111-2222");
// when (4)
Member savedMember = memberRepository.save(member);
// then (5)
assertNotNull(savedMember); // (5-1)
assertTrue(member.getEmail().equals(savedMember.getEmail()));
assertTrue(member.getName().equals(savedMember.getName()));
assertTrue(member.getPhone().equals(savedMember.getPhone()));
}
}
(1)의 @DataJpaTest
는 Spring에서 데이터 액세스 계층을 테스트하기 위한 가장 핵심적인 방법이다.
@DataJpaTest
애너테이션을 테스트 클래스에 추가함으로써, MemberRepository
의 기능을 정상적으로 사용하기 위한 Configuration을 Spring이 자동으로 해준다.
@DataJpaTest
애너테이션은 @Transactional
애너테이션을 포함하고 있기 때문에 하나의 테스트 케이스 실행이 종료되는 시점에 데이터베이스에 저장된 데이터는 rollback 처리된다.
(2)에서 테스트 대상 클래스인 MemberRepository
를 DI 받는다.
(3)에서 테스트 할 회원 정보 데이터를 준비한다.
(4)에서 회원 정보를 저장한다.
(5)에서 회원 정보가 저장되었는지 검증(Assertion)한다.
Member
객체가 null
이 아닌지를 검증한다.assertTrue()
메서드로 리턴 값으로 반환된 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 java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
@DataJpaTest
public class MemberRepositoryTest {
...
...
@Test
public void findByEmailTest() {
// given (1)
Member member = new Member();
member.setEmail("hgd@gmail.com");
member.setName("홍길동");
member.setPhone("010-1111-2222");
// when
memberRepository.save(member); // (2)
Optional<Member> findMember = memberRepository.findByEmail(member.getEmail()); // (3)
// then (4)
assertTrue(findMember.isPresent()); // (4-1)
assertTrue(findMember.get().getEmail().equals(member.getEmail())); // (4-2)
}
}
(1)에서 테스트 할 회원 정보 데이터를 준비한다.
(2)에서 회원 정보를 저장한다.
(3)에서 저장된 회원 정보 중 이메일에 해당하는 회원 정보의 조회를 테스트하기 위해 findByEmail()
로 확인한다.
(4)에서 회원 정보의 조회가 정상적으로 이루어지는지 검증(Assertion)한다.
null
이 아닌지를 검증한다.