“application.yml”中的 Spring Boot 属性未从 JUnit 测试加载

新手上路,请多包涵

我究竟做错了什么?我正在使用这个运行并找到我的 src/main/resources/config/application.yml 的独立小应用程序。相同的配置在 JUnit 中不起作用,见下文:

 @Configuration
@ComponentScan
@EnableConfigurationProperties

public class TestApplication {

    public static void main(String[] args) {

        SpringApplication.run(TestApplication.class);
    }
}

@Component
@ConfigurationProperties

public class Bean{
    ...
}

以下不起作用, application.yml 中的相同属性未加载, Bean 只有 null 值:

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestApplication.class)

public class SomeTestClass {
    ...
}

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

阅读 1.5k
2 个回答

尝试这个:

 @RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class,
    initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
    ...
}

编辑

对于 Spring Boot 版本 1.5+,删除了 SpringApplicationConfiguration 以支持 SpringBootTest 或直接使用 SpringBootContextLoader

您仍然可以将 initializers 参数与 ContextConfiguration 注释一起使用。

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

使用 @SpringBootTest 在SpringBoot 2.0中加载 任何 自定义yml文件的技巧—

  • 在 test\resources 中创建一些 yml 文件
  • 使用 ConfigFileApplicationContextInitializerspring.config.location 属性

示例代码:

 @RunWith(SpringRunner.class)
@ContextConfiguration(
    classes = { MyConfiguration.class, AnotherDependancy.class },
    initializers = {ConfigFileApplicationContextInitializer.class} )
@TestPropertySource(properties = { "spring.config.location=classpath:myApp-test.yml" })
public class ConfigProviderTest {
    @Autowired
    private MyConfiguration myConfiguration; //this will be filled with myApp-test.yml

   @Value("${my.config-yml-string}")
   private String someSrting; //will get value from the yml file.

}

对于 JUnit 5,使用 @ExtendWith(SpringExtension.class) 注释而不是 @RunWith(SpringRunner.class)

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

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