Spring 集成测试模块 运行 来自单独模块的应用程序没有数据库配置属性
Spring integration test module running app from separate module without properties for DB config
给定一个名为 "md-core" 的 spring 引导 gradle 模块,带有一个 Spring 应用程序运行器和一个将其连接到数据库的 PostgresDbConfig。
该应用程序运行良好,并解析了@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 运行程序,但在尝试解析 @Config 中的属性时,它没有找到任何属性。
我试过在测试中直接解析"application.yml"。它不会将属性发送到 "md-core" 模块。在测试中添加 "application.yml" 属性的任何尝试都会将它们解析为测试文件,但不会在访问 "md-core" 模块时发送它们。
是否有任何定义应该在测试中通过注释或在 gradle 构建文件中给出?
启动测试时的类路径不包含 "md-core" 资源位置,仅包含 类。
这会是一个原因吗?如果是,如何在 gradle 构建文件的类路径中引用资源?
对于任何错误或不完整的信息,我深表歉意,这篇post是在一天工作结束时写的,希望早上会有答案。
鉴于这种情况,使用 application.properties 文件进行集成测试的解决方案是简单地添加 initializers = ConfigFileApplicationContextInitializer.class 在测试的 @ContextConfiguration 注释中 class:
@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 and initially found less detailed on another Whosebug question.
给定一个名为 "md-core" 的 spring 引导 gradle 模块,带有一个 Spring 应用程序运行器和一个将其连接到数据库的 PostgresDbConfig。
该应用程序运行良好,并解析了@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 运行程序,但在尝试解析 @Config 中的属性时,它没有找到任何属性。
我试过在测试中直接解析"application.yml"。它不会将属性发送到 "md-core" 模块。在测试中添加 "application.yml" 属性的任何尝试都会将它们解析为测试文件,但不会在访问 "md-core" 模块时发送它们。
是否有任何定义应该在测试中通过注释或在 gradle 构建文件中给出?
启动测试时的类路径不包含 "md-core" 资源位置,仅包含 类。
这会是一个原因吗?如果是,如何在 gradle 构建文件的类路径中引用资源?
对于任何错误或不完整的信息,我深表歉意,这篇post是在一天工作结束时写的,希望早上会有答案。
鉴于这种情况,使用 application.properties 文件进行集成测试的解决方案是简单地添加 initializers = ConfigFileApplicationContextInitializer.class 在测试的 @ContextConfiguration 注释中 class:
@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 and initially found less detailed on another Whosebug question.