4

我最近在我的 SpringBoot 项目中添加了一个 ApplicationStartup 类

@Component
public class ApplicationStartup
    implements ApplicationListener<ApplicationReadyEvent> { ...

它实现了ApplicationListener。

现在,当我运行与该类无关的旧 JUNit 测试时,testrunner 会尝试运行我的 StartupListener,这在这些情况下既不必要也不合适。

我的测试初始化​​时如何跳过 ApplicationListener?

@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...
4

2 回答 2

9

你可以嘲笑你的ApplicationStartup班级

将此声明添加到您的测试用例中:

@MockBean
private ApplicationStartup applicationStartup

这将创建一个模拟实例ApplicationStartup并将其标记为@Primary在您的测试上下文中,从而替换ApplicationStartup.

于 2017-10-06T07:22:33.340 回答
5

您可以创建一个单独的应用程序类进行测试,并排除测试不需要的组件:

@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班级中使用该TestApplication班级:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class SubmissionItemManagerTest {
    ...
}
于 2017-10-06T12:14:29.433 回答