Loading...
Spring Framework Reference Documentation 7.0.2의 Test Execution Events의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
EventPublishingTestExecutionListener는 custom TestExecutionListener를 구현하는 것에 대한 대안적인 접근 방식을 제공합니다. 테스트의 ApplicationContext에 있는 컴포넌트들은 EventPublishingTestExecutionListener에 의해 발행되는 다음 이벤트들을 리스닝할 수 있으며, 각각은 TestExecutionListener API의 메서드에 대응합니다.
BeforeTestClassEventPrepareTestInstanceEventBeforeTestMethodEventBeforeTestExecutionEventAfterTestExecutionEventAfterTestMethodEventAfterTestClassEvent이러한 이벤트들은 mock 빈을 리셋하거나 테스트 실행을 트레이싱하는 등 다양한 이유로 소비될 수 있습니다. custom TestExecutionListener를 구현하는 대신 테스트 실행 이벤트를 소비하는 것의 한 가지 장점은, 테스트 ApplicationContext에 등록된 어떤 Spring 빈에 의해서도 테스트 실행 이벤트가 소비될 수 있다는 점이며, 이러한 빈들은 의존성 주입 및 ApplicationContext의 다른 기능들로부터 직접적인 이점을 얻을 수 있다는 점입니다.
반대로, TestExecutionListener는 ApplicationContext의 빈이 아닙니다.
EventPublishingTestExecutionListener는 기본적으로 등록되어 있습니다. 그러나,ApplicationContext가 이미 로드된 경우에만 이벤트를 발행합니다. 이는ApplicationContext가 불필요하게 또는 너무 일찍 로드되는 것을 방지합니다.<br>따라서,BeforeTestClassEvent는 다른TestExecutionListener에 의해ApplicationContext가 로드된 이후에야 발행됩니다. 예를 들어, 기본적으로 등록된TestExecutionListener구현들의 셋을 사용하는 경우, 특정 테스트ApplicationContext를 사용하는 첫 번째 테스트 클래스에 대해서는BeforeTestClassEvent가 발행되지 않지만, 동일한 테스트 수트 내에서 동일한 테스트ApplicationContext를 사용하는 이후의 테스트 클래스들에 대해서는BeforeTestClassEvent가 발행됩니다. 이는 이후의 테스트 클래스들이 실행될 때 컨텍스트가 이미 로드되어 있기 때문입니다 (@DirtiesContext나 최대 크기 제거 정책을 통해 컨텍스트가ContextCache에서 제거되지 않은 한).<br>모든 테스트 클래스에 대해 항상BeforeTestClassEvent가 발행되도록 보장하고 싶다면,beforeTestClass콜백에서ApplicationContext를 로드하는TestExecutionListener를 등록해야 하며, 그TestExecutionListener는EventPublishingTestExecutionListener보다 먼저 등록되어야 합니다.<br>마찬가지로, 주어진 테스트 클래스의 마지막 테스트 메서드 이후에@DirtiesContext가 사용되어ApplicationContext를 컨텍스트 캐시에서 제거하는 경우, 해당 테스트 클래스에 대해서는AfterTestClassEvent가 발행되지 않습니다.
테스트 실행 이벤트를 리스닝하기 위해 Spring 빈은 org.springframework.context.ApplicationListener 인터페이스를 구현하도록 선택할 수 있습니다. 또는, 리스너 메서드를 @EventListener로 어노테이션하고 위에 나열된 특정 이벤트 타입 중 하나를 리스닝하도록 설정할 수 있습니다(자세한 내용은 Annotation-based Event Listeners를 참조하십시오).
이러한 접근 방식의 인기 때문에, Spring은 테스트 실행 이벤트 리스너의 등록을 단순화하기 위해 다음과 같은 전용 @EventListener 어노테이션을 제공합니다. 이러한 어노테이션들은 org.springframework.test.context.event.annotation 패키지에 위치합니다.
@BeforeTestClass@PrepareTestInstance@BeforeTestMethod@BeforeTestExecution@AfterTestExecution@AfterTestMethod@AfterTestClass기본적으로, 테스트 실행 이벤트 리스너가 이벤트를 소비하는 동안 예외를 던지는 경우, 해당 예외는 사용 중인 하위 테스트 프레임워크(JUnit 또는 TestNG 등)로 전파됩니다. 예를 들어, BeforeTestMethodEvent의 소비가 예외를 발생시키는 경우, 해당 예외의 결과로 해당 테스트 메서드는 실패하게 됩니다.
반대로, 비동기 테스트 실행 이벤트 리스너가 예외를 던지는 경우, 그 예외는 하위 테스트 프레임워크로 전파되지 않습니다. 비동기 예외 처리에 대한 자세한 내용은 @EventListener의 클래스 레벨 javadoc을 참조하십시오.
특정 테스트 실행 이벤트 리스너가 이벤트를 비동기적으로 처리하도록 하려면, Spring의 일반적인 @Async 지원을 사용할 수 있습니다. 자세한 내용은 @EventListener의 클래스 레벨 javadoc을 참조하십시오.
Application Events
Context Management