我正在尝试围绕Spring Boot应用程序编写一些集成测试
我不想使用在每次测试时启动应用程序的SpringJunitRunner。这是因为我有很多测试,我不想为每个测试启动一次应用程序。此外,还有一些东西与我公司的基础架构集成在一起,第二个测试总是在启动spring应用程序时失败(因为其他一些上下文只能创建一次)
所以我的想法是使用TestNG并在套件开始时启动应用程序一次,然后针对应用程序运行测试,然后关闭应用程序
我能够启动应用程序,但在启动它的方法退出后不久就会死掉。有没有办法让应用程序生效
我创建了一个单例类来管理应用程序生命周期
public final class IntegrationTestContext {
private static IntegrationTestContext INSTANCE = null;
private Boolean isInitialized = false;
private ConfigurableApplicationContext applicationContext;
SpringApplication app = null;
public static synchronized IntegrationTestContext getInstance() {
if (INSTANCE == null){
INSTANCE = new IntegrationTestContext();
}
return INSTANCE;
}
private IntegrationTestContext() {
if (!isInitialized) {
runApplication();
isInitialized = true;
}
}
public ApplicationContext getContext() {
return applicationContext;
}
private PropertySourcesPlaceholderConfigurer getBeanFactoryPostProcessor(){
Properties properties = new Properties();
properties.setProperty("some.companyrelated.property.1", "false");
properties.setProperty("some.companyrelated.property.2", "false");
PropertySourcesPlaceholderConfigurer pph = new PropertySourcesPlaceholderConfigurer();
pph.setProperties(properties);
return pph;
}
/**
* This runs the application and sets the spring application context
* that we can query to get the client beans
*/
private void runApplication() {
try {
final String[] args = {};
app = new SpringApplication(Application.class, ClientConfig.class);
app.setBannerMode(Banner.Mode.OFF);
app.addInitializers(new MyCompanyInitializer());
applicationContext = app.run(args);
applicationContext.addBeanFactoryPostProcessor(getBeanFactoryPostProcessor());
applicationContext.refresh();
}
catch (Exception exception) {
}
}
public void shutDownApplication(){
try {
applicationContext.close();
isInitialized = false;
app = null;
INSTANCE = null;
}
catch (Exception e) {
}
}
}
我面临的问题是,在runApplication()方法退出之后,Spring应用程序就会死掉。
可以做些什么来完成这项工作?将在新流程中启动应用程序吗?
答案 0 :(得分:1)
删除了刷新上下文的行并且它正常工作