如何在测试中的 ApplicationEvent 侦听器之前进行一些设置工作

How to make some setup work before ApplicationEvent listener in test

我有一个自定义的 spring-boot-starter,它会在收到 ApplicationReadyEvent 的 spring 应用程序事件时调用一些 REST API,因此配置 class是这样的:

@Configuration
public class MySpringBootStarter {

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

然后,我想使用 MockServer 测试启动器,这需要在测试运行之前创建一些期望。测试 class 可能如下所示:

@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之后创建的,即MySpringBootStarterclass的init方法在[= MySpringBootStarterTest class 中的 17=] 方法。

请问我怎样才能使测试工作?

在 SpringContext 启动之前,您可以使用 static 块初始化程序来 运行 所需的代码。