测试

2017-10-06 63 views
0

时,排除ApplicationStartup事件监听我最近增加了一个ApplicationStartup类我SpringBoot项目测试

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

它实现了ApplicationListener。

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

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

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

你想避免只有一个豆吗? –

回答

1

你可以嘲笑你的ApplicationStartup

此声明添加到您的测试案例:在您的测试方面

@MockBean 
private ApplicationStartup applicationStartup 

这将创建ApplicationStartup一个嘲笑实例,并把它标记为@Primary从而替换ApplicationStartup的实际实例。

+0

如何使用时可以这样做:@SpringBootTest(classes = Application.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) – fiddle

1

您可以为测试创建单独的应用程序类和排除没有被要求测试的组件:

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