Spring Boot 测试 - 使用 test application.yaml 时 @Value 为空

问题描述

我正在尝试运行带有测试值的单元测试 application.yaml 文件,但我的 @Value 变量中仍然收到 null 值。

@RunWith(springrunner.class)
@SpringBoottest
@ContextConfiguration(classes = { SpringBatchConfiguration.class })
public class WebServiceReaderTest {

    //some mock services here

    @InjectMocks
    private CustomWebServiceReader reader;

    private JobParameters jobParameters;

    @Test
    public void readertest() throws Exception {
        StepExecution stepExecution = MetaDataInstanceFactory
                .createStepExecution(jobParameters);

        StepScopeTestUtils.doInStepScope(stepExecution,() -> reader.read());
    }

}

SpringBatchConfiguration.class

@Configuration
@EnableAutoConfiguration
@EnableBatchProcessing
public class SpringBatchConfiguration extends DefaultBatchConfigurer {

    @Override
    public void setDataSource(DataSource dataSource) {
        // leave empty,so the spring batch will not use database,but a Map
    }
}

在我的 Reader 类中,我正在从属性文件中读取值。

@Value("${data-import.threshold}")
private Long threshold;

我在 src/test/resources 文件夹中有我的 application.yaml 文件

data-import:
    threshold: 10

我使用的是 Spring Boot 2.4.4wiremock 2.27.2

我试过使用

@ContextConfiguration(classes = { SpringBatchConfiguration.class },initializers=
        ConfigDataApplicationContextinitializer.class)
@ContextConfiguration(classes = { SpringBatchConfiguration.class },initializers=
        ConfigFileApplicationContextinitializer.class)
@TestPropertySource(locations = { "classpath:application.yaml" })

但这些都没有用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)