개발/Spring
[Spring] @DataJpaTest
상용최
2021. 3. 14. 17:14
반응형
사이드 프로젝트를 시작하려고 했다.
사이드 프로젝트의 목표는 아래 두가지 기술 학습이었다.
- TDD
- JPA
TDD를 적용하려고 했는데 Service 객체의 테스트를 어떻게 해야할지 감이 잡히지 않았다.
최대한 가볍게 테스트케이스를 작성하고 싶었다.
@SpringBootTest를 쓴다면 너무 무겁게 되고 @Mock 객체를 사용하자니 실제 DB를 사용하는것과는 환경이 다르다고 생각했다.
개인적인 취향으로는 실제 DB 환경과 비슷한 인메모리 DB를 이용하여 테스트 하는것을 좋아한다.
그러다 @DataJpaTest 어노테이션을 알게됐다.
@DataJpaTest는 JPA를 다루는데 필요한 Bean만 가져온다.
Mock보다는 무겁겠지만 @SpringBootTest 보다는 가볍다고 생각하여 @DataJpaTest로 진행했다.
@DataJpaTest는 기본적으로 각 테스트케이스가 끝나면 Rollback한다.
그렇기에 아래와 같은 테스트는 실패한다.
또한 기본적으로 인메모리 DB를 사용한다.
@DataJpaTest
class MemberRepositoryTest {
@Autowired
MemberRepository memberRepository;
@Test
@DisplayName("data insert")
public void insert() {
Member member = new Member("test", "test", "test");
memberRepository.save(member);
}
@Test
@DisplayName("data select")
public void select() {
Member member = new Member("test", "test", "test");
boolean isPresent = memberRepository.findById(member.getUserId()).isPresent();
assertTrue(isPresent);
}
}
주의할점 : JUnit4 를 사용할 시 @RunWith(SpringRunner.class) 를 함께 적용 해야한다.
반응형