Spring Boot Test 不加载复杂的配置属性

Posted

技术标签:

【中文标题】Spring Boot Test 不加载复杂的配置属性【英文标题】:Spring Boot Test doesn't load complex configuration properties 【发布时间】:2021-05-07 23:58:12 【问题描述】:

我在 Spring Boot 应用程序中有以下 yaml 配置:

document-types:
  de_DE:
    REPORT: ["Test"]

这是使用以下类加载的,并且在 SpringBootApplication 启动时可以正常工作(您可以调试 DemoApplication.java 来验证):

@Component
@ConfigurationProperties
@Data
public class DocumentTypeConfiguration 

    private Map<String, Map<String, List<String>>> documentTypes;


但是当我执行以下测试时,documentTypes 没有加载(即使正确设置了 someSrting 值,它也是 null)

@SpringBootTest(classes = DocumentTypeConfiguration.class, DocumentTypeService.class)
class DocumentTypeServiceTest 

    @Autowired
    private DocumentTypeConfiguration documentTypeConfiguration;

    @Value("$test")
    private String someSrting;

    @Autowired
    private DocumentTypeService documentTypeService;

    @Test
    void testFindDocumentType() 
        String documentType = "Test";
        String result = documentTypeService.getDocumentType(documentType);
        String expected = "this";
        assertEquals(expected, result);
    


知道我可能做错了什么吗?或者可能 SpringBootTest 不支持属性的复杂类型?

源代码和测试可以在这里找到:https://github.com/nadworny/spring-boot-test-properties

【问题讨论】:

【参考方案1】:

测试中缺少此注释:@EnableConfigurationProperties

所以测试类看起来像这样:

@SpringBootTest(classes = DocumentTypeConfiguration.class, DocumentTypeService.class)
@EnableConfigurationProperties(DocumentTypeConfiguration.class)
class DocumentTypeServiceTest 

    @Autowired
    private DocumentTypeConfiguration documentTypeConfiguration;

    @Value("$test")
    private String someSrting;

    @Autowired
    private DocumentTypeService documentTypeService;

    @Test
    void testFindDocumentType() 
        String documentType = "Test";
        String result = documentTypeService.getDocumentType(documentType);
        String expected = "this";
        assertEquals(expected, result);
    


【讨论】:

以上是关于Spring Boot Test 不加载复杂的配置属性的主要内容,如果未能解决你的问题,请参考以下文章

spring boot importsource怎么设置加载顺序

Spring Boot 不加载 application.yml 配置还是?

Spring Boot 编写Test测试用例的几种方式

Spring Boot 2.X 装载 yaml 配置文件的键值对

spring boot 笔记

spring-boot-test spyBean 注解不注入依赖