@SpringBootTest 의 동작 원리를 확인합니다@ContextConfiguration@SpringJUnitConfig 에 묶여서 사용됩니다.@SpringBootTest 를 사용하면 되고@SpringBootTest 보다는 빠르면서 유닛 테스트보다 컨텍스트 구성이 필요한 환경에서는 Sliced Test 를 사용하면 됩니다@ActiveProfiles@TestPropertySource@DirtiesContextApplicationContext 의 상태가 변경되었음을 의미하여 테스트 종료후 컨텍스트가 종료됩니다. (AFTER_CLASS)@RecordApplicationEventsApplicationEvents 를 통해 발생한 이벤트를 확인할수 있습니다.ApplicationEventsTestExecutionListener 에 의해 테스트 메서드 실행 전후 ApplicationEvents 가 등록/해제 됩니다.ApplicationEvents 가 ThreadLocal 에 저장되기에 비동기 로직의 경우, 정상적으로 이벤트 확인이 안될수 있습니다.@TransactionalTransactionalTestExecutionListener 가 트랜잭션을 실행하고 종료 합니다.@Commit 을 사용합니다.@Sql@SqlConfig@SqlMergeMode@SqlGroup아주 아주 가끔 사용할 일이 있을것으로 보여 남겨놓습니다.
@TestExecutionListenersTestExecutionListener 추가가 필요한 경우 사용@ContextCustomizerFactoriesContextCustomizerFactory 추가가 필요한 경우 사용ContextCustomizer 를 이용하여 ApplicationContext 를 수정할수 있습니다.@ContextHierarchyAopTestUtilsAopUtils, AopProxyUtilsReflectionTestUtilsTestSocketUtilsJdbcTestUtils@SpringBootTest@SpringBootConfiguration 을 찾아 SpringApplication 을 실행합니다. (앞선 내용 참조)@SpringBootConfiguration 이 없다면 @SpringBootTest(classes) 혹은 @ContextConfiguration 이 설정되어야 합니다.@Configuration 을 테스트 클래스 내부에 정의하는 경우, 해당 설정이 기존 전체 설정을 덮어씁니다.@Import 해주어야만 사용이 가능합니다. Excluding Test Configuration...Test (Sliced Test)@SpringBootTest 가 너무 무거울때, 사용할수 있는 테스트 입니다. Auto-configured Tests, Slice Test 종류 및 임포트하는 AutoConfiguration
전체 Configuration 을 로딩하는것이 아닌 일부(slice) 만 로딩하여 보다 빠릅니다.
하지만 설정 지옥에 빠져 애플리케이션 로딩 자체가 어려운 경우들도 있습니다 ㅠ
이를 헤어나오기 위한 팁으로는
@SpringBootApplication 에 절대 AutoConfiguration 관련 어노테이션을 붙이지 말것SpringApplication 을 기반으로 환경을 구성하여 어노테이션이 있는 경우, 해당 AutoConfiguration 을 임포트하게 됩니다.@AutoConfigure... 를 적극 활용할것@AutoConfigure... 어노테이션을 활용하면 필요한 대부분의 AutoConfiguration 을 임포트 해줍니다.Slice Test 내에서 필요없는 빈이 등록되는 경우에는 Slice Test 내의 아래 필드를 활용할수 있습니다.
includeFiltersexcludeFiltersexcludeAutoConfiguration