如何在测试中的 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
之后创建的,即MySpringBootStarter
class的init
方法在[= MySpringBootStarterTest
class 中的 17=] 方法。
请问我怎样才能使测试工作?
在 SpringContext 启动之前,您可以使用 static
块初始化程序来 运行 所需的代码。
我有一个自定义的 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
之后创建的,即MySpringBootStarter
class的init
方法在[= MySpringBootStarterTest
class 中的 17=] 方法。
请问我怎样才能使测试工作?
在 SpringContext 启动之前,您可以使用 static
块初始化程序来 运行 所需的代码。