Spring集成测试模块从单独的模块运行app,没有DB配置的属性

时间:2017-06-08 15:25:38

标签: java spring integration-testing multi-module

给定一个名为“md-core”的spring boot gradle模块,它带有一个Spring应用程序运行器和一个PostgresDbConfig,用于将它连接到DB。

该应用程序运行完美,并从@Config中的“application.yml”文件中解析属性。

@Value("${db.default.pool.size}")
Integer maxPoolSize;

现在,一个名为“integrationtests”的独立模块尝试在“md-core”模块中启动Spring Boot Runner。

@ContextConfiguration(classes = {MdCore.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class GivenTest

测试启动了“md-core”Spring runner,但在尝试解析@Config中的属性时,它找不到任何属性。

我试过在测试中直接解析“application.yml”。它不会将属性发送到“md-core”模块。在测试中添加“application.yml”属性的任何尝试都会将它们解析为测试文件,但在访问“md-core”模块时不会发送它们。

是否应该通过注释或gradle构建文件在测试中给出任何定义?

启动测试时的类路径不包含“md-core”资源位置,只包含类。

这可能是个原因吗?如果是,如何在gradle构建文件的类路径中引用资源?

我为任何错误或不完整的信息道歉,这篇文章是在工作日结束时写的,希望早上能有答案。

1 个答案:

答案 0 :(得分:0)

鉴于这种情况,使用 application.properties 文件进行集成测试的解决方案是在 @中简单添加 initializers = ConfigFileApplicationContextInitializer.class ContextConfiguration Test类的注释:

@ContextConfiguration(
  initializers = ConfigFileApplicationContextInitializer.class,
  classes = {SomeApp.class})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class SomeIntegrationTest {

  @Test
  public void testTheIntegration() {
    // some integration tests here
  }
}

答案也记录在 a post on my blog 中,最初在 another stackoverflow question 上找不到详细信息。