【问题标题】:Specify config file for @SpringApplicationConfiguration为 @SpringApplicationConfiguration 指定配置文件
【发布时间】:2016-04-11 15:11:22
【问题描述】:

目前我的集成测试如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = PingFacadeApplication.class)
@WebIntegrationTest
public class PingResourceTest {
    // some tests that use RestTemplate to contact PingFacadeApplication
}

PingFacadeApplication 是这样定义的:

@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan(basePackages = "edu.self.myapp.ping")
public class PingFacadeApplication {

    public static void main(String[] args) {
        System.setProperty("spring.config.name", "ping-facade-server");
        SpringApplication.run(PingFacadeApplication.class, args);
    }
}

当正常启动(即运行 jar)PingFacadeApplication 时,配置文件(ping-facade-server.yml)会从src/main/resources 正确读取。但是,在运行我的集成测试时,配置文件似乎永远不会被读取,因为服务器总是在端口 8080 上启动。我也尝试将配置文件放在 src/test/resources 但没有运气。

我知道我可以更改 WebIntegrationTest 注释中的端口,但我想避免在两个地方使用它。

非常感谢。

【问题讨论】:

  • 你确定文件没有被读取,难道只是System.setproperty在那里没有作用?
  • main 方法仅在您正常运行应用程序时调用,在运行测试时不调用,因此不会设置系统属性。
  • @AndyWilkinson 确实,该课程必须在内部以另一种方式开始......不过,我找到了解决方法,将其作为答案发布。谢谢!

标签: java rest spring-boot integration-testing


【解决方案1】:

一种解决方法是用@WebIntegrationTest注解指明配置文件的名称:

// ...
@WebIntegrationTest("spring.config.name=ping-facade-server")
public class PingResourceTest {

就我而言,我在 src/test/resources 中有一个 ping-facade-server.yml 文件。

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2019-12-22
    • 2015-06-09
    • 2018-03-04
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多