测试时排除 ApplicationStartup 事件侦听器
Exclude ApplicationStartup Event listener when testing
我最近在我的 SpringBoot 项目中添加了一个 ApplicationStartup class
@Component
public class ApplicationStartup
implements ApplicationListener<ApplicationReadyEvent> { ...
它实现了 ApplicationListener。
现在,当我 运行 我的旧 JUNit 测试与那个无关时 class,测试 运行ner 尝试 运行 我的 StartupListener,它是在这些情况下既不必要也不合适。
如何在我的测试初始化时跳过 ApplicationListener?
@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...
你可以嘲笑你的 ApplicationStartup
class
将此声明添加到您的测试用例中:
@MockBean
private ApplicationStartup applicationStartup
这将创建一个 ApplicationStartup
的模拟实例,并在您的测试上下文中将其标记为 @Primary
,从而替换 ApplicationStartup
的实际实例。
您可以创建一个单独的应用程序 class 用于测试并排除 测试不需要的组件:
@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
value = { ApplicationStartup.class,
RealApplication.class }))
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
然后在你的 SubmissionItemManagerTest
class 使用 TestApplication
class:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class SubmissionItemManagerTest {
...
}
我最近在我的 SpringBoot 项目中添加了一个 ApplicationStartup class
@Component
public class ApplicationStartup
implements ApplicationListener<ApplicationReadyEvent> { ...
它实现了 ApplicationListener。
现在,当我 运行 我的旧 JUNit 测试与那个无关时 class,测试 运行ner 尝试 运行 我的 StartupListener,它是在这些情况下既不必要也不合适。
如何在我的测试初始化时跳过 ApplicationListener?
@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...
你可以嘲笑你的 ApplicationStartup
class
将此声明添加到您的测试用例中:
@MockBean
private ApplicationStartup applicationStartup
这将创建一个 ApplicationStartup
的模拟实例,并在您的测试上下文中将其标记为 @Primary
,从而替换 ApplicationStartup
的实际实例。
您可以创建一个单独的应用程序 class 用于测试并排除 测试不需要的组件:
@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
value = { ApplicationStartup.class,
RealApplication.class }))
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
然后在你的 SubmissionItemManagerTest
class 使用 TestApplication
class:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class SubmissionItemManagerTest {
...
}