测试时排除ApplicationStartup事件侦听器

时间:2017-10-06 01:51:19

标签: java spring-boot junit spring-boot-test springrunner

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

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

它实现了ApplicationListener。

现在,当我运行与该类无关的旧JUNit测试时,testrunner尝试运行我的StartupListener,在这些情况下,这两者都不合适。

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

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

2 个答案:

答案 0 :(得分:2)

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

@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 {
    ...
}

答案 1 :(得分:1)

您可以模拟p4 --field Description=test --field Files= change -o | p4 -Ztag -F "add -c %change% test1.txt test2.txt" change -i | p4 -x - run 班级

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

ApplicationStartup

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