在Spring Boot集成测试中从主要配置以外的其他源加载应用程序上下文

时间:2019-03-27 10:36:03

标签: spring spring-boot spring-batch spring-boot-test

我有一个Spring boot应用程序,其中包含2个模块:一个模块具有rest控制器,第二个模块具有批处理模块。

下面有一个Spring boot应用程序类,用于在第一个模块中启动服务:

package a.b.c

@SpringBootApplication
@ImportResource({"classpath:META-INF/rest-context.xml","classpath:META-INF/batch-Context.xml"})
@EnableScheduling
public class Application {


    public static void main(String[] args) {

    }

}

批处理模块的层次结构也为a.b.c ....因此,在启动spring boot应用程序时也会扫描批处理模块中的配置类。基本上,启动Spring Boot应用程序时也会启动批处理模块。

此应用程序使用Spring Cloud配置服务器获取环境属性。

我正在为第一个模块编写集成测试用例(请参阅最后的示例配置),并面临以下问题:

  1. spring-cloud配置服务器无法解析batch-Context.xml中引用的属性。
  2. 要克服pt中的问题。 1,我添加了一个test.properties,以便可以从中解析属性。但是,相同的问题仍然存在。
  3. 现在,我正在考虑一种避免启动批处理模块的方法(加载batch-Context.xml和扫描批处理模块中的配置)。重构软件包名称可以防止配置扫描。为了避免加载batch-Context.xml,我想我需要创建一个新的配置类,在该类中可以导入batch-Context.xml,并且在测试用例中应以某种方式排除此类。但是,我不确定如何在测试案例中排除新的配置类。

我有以下问题:

  • @SpringBootTest是否有一种方法可以从 不同的spring boot配置类,例如Application1(我可以 删除此处的batch-Context.xml导入)而不是应用程序?
  • 如果我在单独的配置中单独导入batch-Context.xml 类,然后如何在测试用例中排除它呢?
  • 还有其他解决方案吗?

示例集成测试用例配置:

@TestPropertySource(locations = "classpath:application-test.properties")
@RunWith(SpringRunner.class)
@ActiveProfiles("profile0")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = {"spring.cloud.config.enabled=false"})
public class ControllerIT {...
}

任何指针都会有用吗?

0 个答案:

没有答案