Skip to content

tech-references/spring-application-context-caching-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

컨텍스트 캐싱

MemberRepositoryTest, ProductRepositoryTest는 모두 모킹없이 @DataJpaTest, @ActiveProfiles 애너테이션만 사용했다.

trace_옵션_추가.png

  • 테스트용 yml에 이미지와 같이 context cache에 대한 logging level 설정
  • TRACE로 레벨을 설정함으로써 컨텍스트 저장, 조회에 대한 로그를 확인할 수 있음

MemberRepositoryTest에서_컨텍스트_캐싱.png

  • MemberRepositoryTest에서 ApplicationContext를 저장하는 것을 확인

ProductRepositoryTest에서_캐싱된_컨텍스트_조회.png

  • MemberRepositoryTest 다음에 실행된 ProductRepositoryTest에서 캐싱된 ApplicationContext를 조회하여 사용하는 것 확인

  • @MockBean을 사용하는 경우 스프링 빈을 수정하는 것이기 때문에 컨텍스트가 수정되어 새로운 컨텍스트를 로딩한다.
    • 다만 애초에 로딩할 빈이 많지 않아서 그런지 @SpringBootTest 애너테이션임에도 불구하고 굉장히 빠름

Memo

  • Mockito@InjectMocks, @Mock은 스프링 빈을 활용하는 것이 아니라 ApplicationContext에 영향을 주지 않는다.
    • 즉, 스프링 빈 로딩없이 단위 테스트에 활용하기 적합
  • 하나의 메소드만 테스트하는 RepositoryTest의 경우에는 @DataJpaTest를 사용
    • 컨텍스트가 달라지지 않아 캐싱된 ApplicationContext를 조회하여 손쉽게 재사용

TODO

  • 통합테스트, RESTDocs 테스트에서 @MockBean 애너테이션을 사용하지 않고 모킹과 컨텍스트 캐싱을 성공적으로 할 수 있을지 파악
    • 추상 클래스를 만들어 테스트에 필요한 모든 객체를 @MockBean를 통해 주입하고 테스트 클래스에서 상속받는다.
  • 우아한스프링배치 by 우아한형제들 이동욱님 참고

About

Spring 테스트 컨텍스트 최적화

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages