반응형
사이드 프로젝트를 시작하려고 했다.
사이드 프로젝트의 목표는 아래 두가지 기술 학습이었다.
- 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) 를 함께 적용 해야한다.
반응형
'개발 > Spring' 카테고리의 다른 글
[Spring Security] Cannot pass a null GrantedAuthority collection (0) | 2021.03.26 |
---|---|
[Spring] controller unit test with csrf (1) | 2021.03.17 |
[Spring] Controller에 파라미터 바인딩은 어떻게 이루어질까 ? (0) | 2021.01.26 |
[Spring] Bean은 어떻게 등록되는 것일까? (1) | 2021.01.17 |
[Spring] Junit5로 예외테스트 하기 (0) | 2020.12.06 |
댓글