Loading...
Spring Framework Reference Documentation 7.0.2의 Application Events의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
TestContext 프레임워크는 테스트 내에서 해당 이벤트에 대해 assertion을 수행할 수 있도록
ApplicationContext에 publish된
application events
를 기록하는 것을 지원합니다. 단일 테스트 실행 동안 publish된 모든 이벤트는
java.util.Stream으로 이벤트를 처리할 수 있게 해주는 ApplicationEvents API를 통해
사용할 수 있습니다.
테스트에서 ApplicationEvents를 사용하려면 다음을 수행하십시오.
테스트 클래스가
@RecordApplicationEvents
로 어노테이션 또는 메타-어노테이션 되어 있는지 확인하십시오.
ApplicationEventsTestExecutionListener가 등록되어 있는지 확인하십시오. 그러나
ApplicationEventsTestExecutionListener는 기본적으로 등록되어 있으며, 기본 리스너를
포함하지 않는 @TestExecutionListeners를 통한 커스텀 설정이 있는 경우에만
수동으로 등록해야 합니다.
SpringExtension for JUnit Jupiter
를 사용할 때, @Test, @BeforeEach 또는 @AfterEach 메서드에서 ApplicationEvents
타입의 메서드 매개변수를 선언하십시오.
ApplicationEvents는 현재 테스트 메서드의 라이프사이클에 scope되므로, 이것이 권장되는
접근 방식입니다.또는 ApplicationEvents 타입의 필드에 @Autowired를 어노테이션하고, 해당
ApplicationEvents 인스턴스를 테스트 및 라이프사이클 메서드에서 사용할 수 있습니다.
ApplicationEvents는 현재 테스트 메서드의 라이프사이클에 scope된 resolvable<br>_dependency_로서ApplicationContext에 등록됩니다. 결과적으로,<br>ApplicationEvents는 테스트 메서드의 라이프사이클 밖에서는 access할 수 없으며,<br>테스트 클래스의 constructor에@Autowired될 수 없습니다.
다음 테스트 클래스는 JUnit Jupiter용 SpringExtension과
AssertJ를 사용하여 Spring에서 관리되는 컴포넌트의 메서드를
호출하는 동안 publish된 application events의 타입을 assert합니다:
1@SpringJUnitConfig(/* ... */) 2@RecordApplicationEvents // (1) 3class OrderServiceTests { 4 5 @Test 6 void submitOrder(@Autowired OrderService service, ApplicationEvents events) { // (2) 7 // Invoke method in OrderService that publishes an event 8 service.submitOrder(new Order(/* ... */)); 9 // Verify that an OrderSubmitted event was published 10 long numEvents = events.stream(OrderSubmitted.class).count(); // (3) 11 assertThat(numEvents).isEqualTo(1); 12 } 13}
| 1 | 테스트 클래스에 @RecordApplicationEvents를 어노테이션합니다. |
| 2 | 현재 테스트를 위한 ApplicationEvents 인스턴스를 주입합니다. |
| 3 | ApplicationEvents API를 사용하여 얼마나 많은 OrderSubmitted 이벤트가 publish되었는지 count합니다. |
1@SpringJUnitConfig(/* ... */) 2@RecordApplicationEvents // (1) 3class OrderServiceTests { 4 5 @Test 6 fun submitOrder(@Autowired service: OrderService, events: ApplicationEvents) { // (2) 7 // Invoke method in OrderService that publishes an event 8 service.submitOrder(Order(/* ... */)) 9 // Verify that an OrderSubmitted event was published 10 val numEvents = events.stream(OrderSubmitted::class).count() // (3) 11 assertThat(numEvents).isEqualTo(1) 12 } 13}
| 1 | 테스트 클래스에 @RecordApplicationEvents를 어노테이션합니다. |
| 2 | 현재 테스트를 위한 ApplicationEvents 인스턴스를 주입합니다. |
| 3 | ApplicationEvents API를 사용하여 얼마나 많은 OrderSubmitted 이벤트가 publish되었는지 count합니다. |
ApplicationEvents API에 대한 추가 세부 정보는
ApplicationEvents javadoc을
참조하십시오.
TestExecutionListener Configuration
Test Execution Events