任意 ApplicationConfiguration class 的 SpringBootTest 来测试 application.yml 文件的读取

SpringBootTest for an arbitrary ApplicationConfiguration class to test the reading of the application.yml file

我想了解如何为现有的 ApplicationConfiguration class 编写 SpringBootTest 以测试读取 application.yml 文件的功能。我会很高兴 java 或 groovy。我无法共享现有的 ApplicationConfiguration class,因此我很乐意接受提供的任何示例,这些示例以现有的 ApplicationConfiguration 开头,该 ApplicationConfiguration 读取 application.yml 文件并将该文件中的数据解析为对象需要接收配置。

到目前为止,到目前为止,我所读的内容并没有帮助我理解如何做到这一点,我在这里带着我的帽子在这里寻求帮助。我了解了 Spring 引导和 Spring 引导测试的一些基本概念,但实际上从头开始连接它以完成此特定任务让我清楚地知道我在该方法中遗漏了一些重要的东西如何做到这一点。

如果您想花时间向我解释一下,那很好,但如果您看过在线文档、教程、甚至是适合这一挑战的视频。

迄今为止,我发现的资源还没有填补让我从现有的 ApplicationConfiguration class 到从中创建新的 ApplicationConfigurationTests class 的空白。 Spring 文档本身似乎掩盖了一些事情,例如:最低要求。

我想你有 application.yml.
比如你定义了消息队列系统的一些属性。

mq:
  receive_channel: "RES"
  send_channel: "REQ"

首先,您应该定义一个 class 来呈现您放置在 .yml 文件中的相关值。

public class MQProperties {
    private String receive_channel;
    private String send_channel;
    // getter and setters
}

第二个,你应该定义一个配置class如下。

@Configuration
@PropertySource(value = "classpath:application.yml")
public class ApplicationConfigurationProperties {

    @Bean
    @ConfigurationProperties(prefix = "mq")
    public MQProperties mqProperties() {
        return new MQProperties();
    }
}

最后 在您的测试中 class 您验证了属性的值。

@RunWith(SpringRunner.class)
@SpringBootTest
public class PropertiesTest {

    @Value("${mq.receive_channel}")
    private String mqReceiveChannel;
    @Value("${mq.send_channel}")
    private String mqSendChannel;

    @Autowired
    private ApplicationConfigurationProperties configurationProperties;

    @Test
    public void get_mq_receive_channel() { 
     assertThat(configurationProperties.mqProperties().getReceive_channel()).isEqualTo(mqReceiveChannel);
    }

    @Test
    public void get_mq_send_channel() {  
     assertThat(configurationProperties.mqProperties().getSend_channel()).isEqualTo(mqSendChannel);
    }
}