@WebMvcTest does not find buildProperties

六眼飞鱼酱① 提交于 2020-01-15 10:06:59

问题


I have working JUnit tests for my MVC controllers. Now I wanted to display the build number in the footer of every page, so I added the following div in my thymeleaf templates:

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

Now the test fail with:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'buildProperties' available

I tried to add it as a mock to no avail:

@MockBean
private BuildProperties buildProperties;

Or following this advice (see my comment below the answer).

So how can I make my tests work again with the BuildProperties?


回答1:


When you try to access a bean via the following way: ${@buildProperties.getVersion()} it's actually a SpEL expression for accessing a bean via a BeanReference. Unfortunately it has no default value and instead of returning null it throws an exception if the bean cannot be found.

I don't know any easy way to check if a bean exists in the context via SpEL.

So I think the best solution if you create a nested test configuration class and define a default BuildProperties bean there.

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

Or you can create it as a separate class and use @Import(TestConfig.class) if you need this extra configuration in multiple test classes.




回答2:


If you are using gradle , just add this to your build.grandle file:

SpringBoot { buildInfo() }

After configuring the spring-boot-maven-plugin you can build the application and access information about application’s build. The BuildProperties object is injected by Spring (@Autowired)



来源:https://stackoverflow.com/questions/54712564/webmvctest-does-not-find-buildproperties

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!