在 SpringBoot 测试中加载不同的 application.yml

新手上路,请多包涵

我正在使用一个运行我的 src/main/resources/config/application.yml 的 Spring Boot 应用程序。

当我运行我的测试用例时:

 @RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
public class MyIntTest{
}

测试代码仍然运行我的 application.yml 文件来加载属性。我想知道在运行测试用例时是否可以运行另一个 *.yml 文件。

原文由 Exia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 839
2 个回答

一种选择是使用配置文件。创建一个名为 application-test.yml 的文件,将这些测试所需的所有属性移动到该文件,然后将 @ActiveProfiles 注释添加到您的测试类:

 @RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
@ActiveProfiles("test") // Like this
public class MyIntTest{
}

请注意,它将额外加载 application-test.yml,因此 application.yml 中的所有属性仍将被应用。如果您不希望这样,也可以使用这些配置文件,或者在您的 application-test.yml 中覆盖它们。

原文由 g00glen00b 发布,翻译遵循 CC BY-SA 3.0 许可协议

看到这个: Spring @PropertySource 使用 YAML

我认为第三个答案有你正在寻找的东西,即有一个单独的 POJO 将你的 yaml 值映射到:

 @ConfigurationProperties(path="classpath:/appprops.yml", name="db")
public class DbProperties {
    private String url;
    private String username;
    private String password;
...
}

然后用这个注释你的测试类:

 @EnableConfigurationProperties(DbProperties.class)
public class PropertiesUsingService {

    @Autowired private DbProperties dbProperties;

}

原文由 Pete 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进