junit集成测试弹簧属性未解决

问题描述 投票:0回答:1

我有一个简单的集成测试,它是这样的

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyIntTestConfig.class, properties = {some.property.key=value})
public class MyIntTest {
    @Autowired
    public MyComponent myComponent;

    // ...

}

@Configuration
public class MyIntTestConfig {
    @MockBean
    private MyComponent myComponent;
    @Bean
    public myComponent() {
        // ...
        return myComponent;
    }
}

application.yml

some:
  property:
    key: ${PLACEHOLDER}

当我用 mvn clean test 我得到的错误是

Could not resolve placeholder 'PLACEHOLDER' in value "${PLACEHOLDER}"

许多其他答案建议增加一个 application-test.yml 但我想直接在测试类上做,因为参数可以从一个测试类改变到另一个测试类,而且我真的不希望有很多不同的 .yml 测试配置文件。

还有人遇到过这个问题吗?

编辑

Deadpool的答案解决了这个问题,因为它设置了实际的占位符,所以在一堆不同的属性键的值可能来自同一个占位符的情况下,他的答案就是这样。设置每个 some.property.key=PLACEHOLDER 也能用,直到你忘了一个,我就是这么做的。

java spring-boot unit-testing junit4
1个回答
1
投票

一旦你有了属性的占位符 application.yml

some:
 property:
  key: ${PLACEHOLDER}

你应该使用该占位符来替换值

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyIntTestConfig.class, properties = {PLACEHOLDER=value})
 public class MyIntTest {

    @Autowired
    public MyComponent myComponent;

      // ...

 }
© www.soinside.com 2019 - 2024. All rights reserved.