@WebMvcTest找不到buildProperties


问题内容

我有适用于我的MVC控制器的JUnit测试。现在,我想在每个页面的页脚中显示内部版本号,因此我在百里香模板中添加了以下div:

<div class="versionInfo">Version <span th:text="${@buildProperties.getVersion()}"></span></div>

现在测试失败并显示:

原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为’buildProperties’的bean可用

我试图将其作为模拟添加,但无济于事:

@MockBean
private BuildProperties buildProperties;

那么如何使我的测试再次起作用BuildProperties


问题答案:

当您尝试通过以下方式访问bean时:${@buildProperties.getVersion()}它实际上是一个SpEL表达式,用于通过BeanReference访问bean。不幸的是,它没有默认值,null如果找不到该bean,它不会返回而是抛出异常。

我不知道通过SpEL检查上下文中是否存在bean的任何简便方法。

因此,我认为最好的解决方案是创建嵌套的测试配置类并在那里定义默认的BuildProperties bean。

@TestConfiguration
public static class TestConfig {    
  @Bean 
  BuildProperties buildProperties() {
    return new BuildProperties(new Properties());
  }
}

或者,如果需要在多个测试类中进行此额外配置,则可以将其创建为单独的类并使用@Import(TestConfig.class)。