我注射有问题 @Value('${mybean.secret}')
在spock和spring-boot&groovy的测试中,将属性添加到我的bean中。
我有一个非常简单的测试班 MyBeanTest
```
@ContextConfiguration(classes = [
MyAppConfig
])
@PropertySource([
"classpath:context/default-properties.yml"
])
class MyBeanTest extends Specification {
@Autowired
MyBean myBean
def "should populate properties "() {
expect:
myBean.secretProperty == "iCantTellYou"
}
}
以及 `MyAppConfig.groovy` 因此:
@Configuration
class MyAppConfig {
@Bean
MyBean credential(@Value('${mybean.secret}') String secret) {
return new MyBean(secret)
}
}
当我运行测试时 `value` 注射到 `secret` 只是 `${mybean.secret}` . 真正的价值不是从 `properties` 随函附上测试规范文件。
我用的是单引号 `@Value` 因为groovy。双倍 `quote` 与 `$` 符号使它由groovy gstring机制处理。
但是,该问题不会在常规应用程序运行时发生。
如果我启动应用程序并将断点放在 `MyAppConfig#credential` 方法 `secret` 从属性文件中正确读取值,其配置如下:
@Configuration
@PropertySource(["classpath:context/default-properties.yml"])
class PropertiesConfig {
}
当我这样从手上指定属性时:
@TestPropertySource(properties = [
"mybean.secret=xyz"
])
class MyBeanTest extends Specification {
它起作用了。属性已读取。但这并不是我的目标,因为项目中有更多的属性,从手边到处定义它们会变得很麻烦。
你能找出我在这段代码中遗漏的问题吗?
1条答案
按热度按时间ktecyv1j1#
丢失的拼图是yamlpropertysourcefactory。
我用的是
yml
具有嵌套属性的属性文件:Spring没有正确加载。
我得更新一下
@PropertySource
注解如下:现在它就像一个魔咒?。
我是在baeldung网站上学到的=>https://www.baeldung.com/spring-yaml-propertysource