[Springboot-junit] - JPA 테스트/@DataJpaTest
- springboot 2.5 + junit5
- DB : mariadb:10.4.18
@DataJpaTest
- https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/orm/jpa/DataJpaTest.html
- JPA 테스트와 관련된 구성만 적용됨 / 스프링 자동 구성은 비활성화
- spring.jpa.show-sql 설정이 true로 설정되어 실행되는 sql 쿼리가 console에 출력됨
// In-memory 기반 H2 사용
@DisplayName("Role 테스트 - H2")
@DataJpaTest
class RoleRepositoryH2Test {
// @formatter:off
@Autowired
RoleRepository roleRepository;
@DisplayName("Role 등록/조회 테스트")
@Test
void test_1() {
// given
Role role = Role.builder()
.name("ROLE_USER")
.description("사용자")
.build();
// when/then
assertNotNull(roleRepository.save(role), "Role 등록 테스트");
assertNotNull(roleRepository.findOneByName("ROLE_USER"), "Role 검색 테스트");
}
}
실제 db 사용
- @AutoConfigureTestDatabase(replace = Replace. NONE)
@DisplayName("Role 테스트 - Real db")
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE) // 실제 구성된 db 사용
class RoleRepositoryRealDbTest {
}
롤백 비활성화
- @DataJpaTest에는 @Transactional 선언되어 있어 기본적으로 rollback 처리됨
- @Rollback(false)
@DisplayName("Role 테스트 - Real db")
@DataJpaTest
@Rollback(false)
@ActiveProfiles("test")
@AutoConfigureTestDatabase(replace = Replace.NONE)
class RoleRepositoryRealDbTest {
}
Repository 를 사용하는 Class 테스트
@Import
- 테스트에 사용하는 class에서 Repository를 사용하는 경우 @Import 어노테이션을 사용
@DisplayName("UserDetailsServiceEx - EntityManager")
@DataJpaTest
@ActiveProfiles("test")
@Import(UserDetailsServiceEx.class)
class UserDetailsServiceExTest {
}
그외
- class에서 른 클래스가 autowired 되어 있지만 테스트 대상 기능/메소드에서는 해당 class를 사용하지 않는 경우 @MockBean을 사용
@Service
public class UserDetailsServiceEx implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Autowired
private TestService testService;
...
}
// 아래처럼 실제 TestService를 사용하지 않고
@Import(UserDetailsServiceEx.class, TestService.class)
@DisplayName("UserDetailsServiceEx - EntityManager")
@DataJpaTest
@ActiveProfiles("test")
@Import(UserDetailsServiceEx.class)
class UserDetailsServiceExTest {
// mockBean을 사용
@MockBean
TestService testService;
}
'spring' 카테고리의 다른 글
[개발환경] Ubuntu - jdk tar.gz 설치 (0) | 2022.09.23 |
---|---|
[Spring] properties 설정 분리(2) (0) | 2021.02.17 |
[Spring] properties 설정 분리(1) (0) | 2021.02.17 |
[Springboot-junit4] controller 테스트하기 (0) | 2019.06.09 |
[spring] json 샘플 (0) | 2017.06.27 |