13

我正在尝试使用 junit 对 spring-boot 应用程序进行单元测试。我已将 application-test.properties 放在 src/test/resources 下。我有一个读取 application.properties 的 ApplicationConfiguration 类。

我的测试课看起来像这样

@RunWith(SpringRunner.class)
@SpringBootTest(classes=ApplicationConfiguration.class)
@TestPropertySource(locations = "classpath:application-test.properties")
@ActiveProfiles("test")
   public class TestBuilders {
      @Autowired
      private ApplicationConfiguration properties;

当我尝试读取属性时,它始终为空。

我的 ApplicationConfiguration 类看起来像这样

@Configuration
@ConfigurationProperties
@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource(value="file:config.properties", ignoreResourceNotFound = 
        true)})
public class ApplicationConfiguration{
    private xxxxx;
    private yyyyy;

我尝试了我在谷歌上找到的所有可能的方法。没有运气。请帮忙!提前致谢。

4

1 回答 1

33

问题是你@EnableConfigurationProperties的测试课上没有。
当您加载应用程序时,它从@SpringBootApplication您可能拥有的主类(具有 的)@EnableConfigurationProperties开始,因此在您启动应用程序时它可以工作。
而当您仅ApplicationConfiguration使用此处指定的类 运行测试时

@SpringBootTest(classes=ApplicationConfiguration.class)

Spring 不知道它必须启用配置属性,因此这些字段没有注入,因此为空。但是春天正在阅读您的application-test.properties文件。这可以通过直接在测试类中注入值来确认

@Value("${xxxxx}")
private String xxxxx;

这里值被注入。但是要注入一个类,ConfigurationProperties你需要使用它来启用它@EnableConfigurationProperties

@EnableConfigurationProperties你的测试课,一切正常。

于 2018-01-05T12:50:27.230 回答