在 Citrus TestNG 测试期间 Spring Boot 未加载测试特定应用程序属性
Posted
技术标签:
【中文标题】在 Citrus TestNG 测试期间 Spring Boot 未加载测试特定应用程序属性【英文标题】:Spring Boot Not Loading Test Specific Application Properties During Citrus TestNG Tests 【发布时间】:2019-07-30 00:47:47 【问题描述】:在运行我的 Citrus 集成测试时,我试图让 Spring Boot 自动加载 src/test/resources/application.properties
文件而不是 src/main/resources/application.properties
文件。这些属性在测试期间可用,但它们不会覆盖主 Spring Boot 应用程序中使用的主要属性。
这是我目前的配置:
src/main/java/EventPublisher.java
@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
public class EventPublisher
public static void main(String[] args)
SpringApplication.run(EventPublisher.class, args);
src/main/resources/application.properties
consumer.to=stream:out
src/test/java/EndpointConfig.java
@Configuration
@PropertySource("classpath:application.properties")
@SpringBootTest
public class EndpointConfig
...
src/test/java/CitrusTestsIT.java
@Test
@SpringBootTest
public class AutomatedIT extends TestNGCitrusTestRunner
...
src/test/resources/application.properties
citrus.rest.server.port=7913
consumer.to=localhost:$citrus.rest.server.port/consumer
pom.xml spring sn-p
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>$spring-boot.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
我假设存在注释或文件结构问题,但我至今无法弄清楚是什么问题。
更新
在将文件重命名为application-test.properties
并更改pom.xml
中的spring-boot
插件后,我得到了要从src/main/resources
加载的测试属性:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>$spring-boot.version</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
<fork>true</fork>
<profiles>test</profiles>
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
通过在 POM 中将配置文件设置为 test
,现在 Spring Boot 会加载测试属性。
这似乎不是正确的做法,这也限制了 application-test.properties
文件的使用仅限于主 Spring Boot 应用程序,而不是测试包。
【问题讨论】:
【参考方案1】:您将这两个文件称为完全相同的东西,application.properties
。这意味着只会读取具有最高优先级的单个文件;在这种情况下,它是您的src/test
中的那个。相反,使用 Spring 的配置文件功能将您的覆盖文件重命名为 src/test/resources/application-test.properties
,这将允许 Boot 看到这两个文件并应用您想要的覆盖逻辑。
【讨论】:
我将@ActiveProfiles("test")
添加到src/test/java/CitrusTestsIT.java
并将src/test/resources
中的属性文件重命名为application-test.properties
。日志显示配置文件已设置为测试,但未使用任何测试属性。
test
配置文件通常应该自动添加,我相信。检查您的控制台日志,它会告诉您正在使用哪些配置文件(以及哪些属性来源)。
如果我不包含注释,我会在日志中看到:No active profile set, falling back to default profiles: default
。
我设法从src/main/resources
文件夹中加载了application-test.properties
文件。查看我的更新。以上是关于在 Citrus TestNG 测试期间 Spring Boot 未加载测试特定应用程序属性的主要内容,如果未能解决你的问题,请参考以下文章