Как заставить некоторую настройку работать перед слушателем ApplicationEvent в тесте - PullRequest
1 голос
/ 04 февраля 2020

У меня есть настроенный spring-boot-starter, который будет вызывать некоторые REST API, когда он получает событие приложения spring ApplicationReadyEvent, поэтому класс конфигурации выглядит примерно так:

@Configuration
public class MySpringBootStarter {

    @EventListener(ApplicationReadyEvent.class)
    public void init() {
        // Call REST APIs here
    }
}

Затем я хотите протестировать стартер, используя MockServer, что требует определенных ожиданий до запуска теста. Тестовый класс может выглядеть следующим образом:

@ExtendWith(MockServerExtension.class)
@SpringBootTest
@ContextConfiguration
@MockServerSettings(ports = {28787, 28888})
public class MySpringBootStarterTest {
    private MockServerClient client;

    @BeforeEach
    public void beforeEachLifecycleMethod(MockServerClient client) {
    this.client = client;
        //creating expectations here
    }

    @Test
    void shouldBeTrue() {
        assertThat(true).isTrue();
    }

    @SpringBootApplication
    static class MyTest {
        public void main(String[] args) {
            SpringApplication.run(Test.class, args);
        }
    }
} 

Но на самом деле ожидания всегда создаются после того, как ApplicationReadyEvent, то есть метод init класса MySpringBootStarter вызывается до того, как метод beforeEachLifecycleMethod в классе MySpringBootStarterTest.

Как я могу заставить тест работать, пожалуйста?

1 Ответ

3 голосов
/ 04 февраля 2020

Вы можете использовать static блочный инициализатор для запуска необходимого кода перед загрузкой SpringContext.

...