not work on Spring Boot Test
I want to take a Junit test for Spring-boot as below:
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = {ApplicationTest.class})public class TestOnSpring { @Value("${app.name}") private String appName; @Test public void testValue(){ System.out.println(appName); }}
and ApplicationTest.java like this
@ComponentScan("org.nerve.jiepu")@EnableAutoConfiguration()public class ApplicationTest { public static void main(String[] args) { SpringApplication.run(ApplicationTest.class, args); }}
and my POM like this:
When I run the test, I got below error informationorg.springframework.boot spring-boot-starter-parent 1.3.0.BUILD-SNAPSHOT
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'app.name' in string value "${app.name}" at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204) at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178) at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:807) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1027) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:543) ... 31 moreBut When I run this application as normal Java Application
@SpringBootApplicationpublic class Application { public static void main(String[] args){ SpringApplication.run(Application.class, args); }}
It work well!
What's wrong with it ? How should I take the junit test with Spring-boot? Thanks a lot!
Answer:
You can use the @SpringBootTest
that will do create the PropertySourcesPlaceholderConfigurer
automatically.
This is described in the Testing chapter of the