Spring Boot
[Spring boot] JPA test
하악생
2023. 1. 10. 00:20
SpringBootTest 어노테이션을 통해서 EntityManager를 Autowired하고 데이터를 조회하는 방법도 있지만,
모든 Beans를 스캔하는 방식을 사용하고 있기 때문에 프로젝트가 무거워질수록 테스트 시간이 오래 걸릴 수 있다.
원하는 부분에 대해서만 쿼리 테스트를 진행하고싶다면, DataJpaTest 어노테이션으로 데이터베이스 관련해서만 테스트해볼 수 있다.
하지만.. 원격 DB를 가리키는 경우 드라마틱한 수행시간 차이는 느낄 수가 없었다.
JUnit5 기준 JPA(+ QueryDSL)만 테스트하고 싶은 경우 다음 어노테이션을 추가한다.
(JUnit4는 @RunWith(SpringRunner.class)까지 추가)
1. AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
-> NONE : 데이터베이스의 소스를 프로젝트 Active Profiles에 정의되어있는 데이터베이스로 가리키도록 하는 옵션
2. DataJpaTest
-> JPA 테스트 명시
다음은 테스트용 풀 코드! TestEntity라는 Entity가 있다고 가정한다.
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@DataJpaTest
public class JPATests {
@Autowired
private TestEntityManager testEntityManager;
@Test
@Rollback(value = false)
public void testEntityCreator() throws Exception {
EntityManager em = testEntityManager.getEntityManager();
TestEntity testEntity = new TestEntity();
testEntity.setValue1("test!");
em.persist(testEntity);
}
}
- @Rollback(value = false) : 테스트 진행 시 롤백을 하지 않도록 (기본적으로는 모든 테스트 작업은 rollback이 진행되도록 되어있음)
반응형