kok202
[2019.04.06] SpringBootTest, SpringJpaTest

2019. 4. 6. 23:44[개발] 일기

@SpringBootTest와 @DataJpaTest의 차이점
@SpringBootTest : 모든 Bean을 읽어들여서 테스트한다.
@DataJpaTest : @Entity, @Repositort 만 읽어들여서 테스트한다.
    @Configuration, @Component, @Service 등 을 스캔을 하지 않는다.
    데이터베이스를 인메모리 데이터 베이스를 이용하여 테스트를 수행한다.
    덕분에 DataJpaTest의 로딩 속도가 더 빠르다.
    +) @Transactional 이 포함되어 있으므로 굳이 달아줄 필요가 없다.
    +) @SpringBootApplication 클래스안에 @Autowired 하는 객체가 있으면 DataJpaTest로 돌렸을 때 제대로 주입이 안되는 경우가 있다. 이럴땐 @Autowired(required=false)를 해주면 된다. 

 



이외의 더 많은 Test의 영역을 정해주는 Annotation  

Annotation 특징 비고
@JdbcTest  인메모리 데이터베이스로 테스트된다. 테스트를 위한 JdbcTemplate이 생성된다.  @Autowired  
private JdbcTemplate jdbcTemplate; 
@JsonTest Jackson serializer 와 deserializer의 테스트  @Autowired 
private JacksonTester jacksonTester; 
@DataMongoTest 인메모리 데이터베이스로 테스트된다. Entity 대신 Document를 스캔한다. mongoTemplate이 생성된다.  @Autowired  
private MongoTemplate mongoTemplate; 
@RestClientTest 클라이언트에서 서버와 Rest 통신을 확인할 때 유용하다.   
@WebMvcTest 원래는 MockMVC 관련해서 설정 어노테이션을 일일히 달아줘야했는데 한번에 해준다.  @Autowired 
private MockMVC mockMVC; 

출처 1 : https://hyper-cube.io/2017/08/06/spring-boot-test-1/ 
출처 2 : https://hyper-cube.io/2017/08/10/spring-boot-test-2/

 


결국 테스트할 때 로딩 속도를 빨리하기 위해서 쓸데없는 Bean 스캔을 줄이도록 영역을 정해주는 Annotation 들이다.