2015-10-21 2 views
17

Я хочу, чтобы пройти тест Junit для Spring-загрузки, как показано ниже:@value не работает на Спринг загрузки Тест

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {ApplicationTest.class}) 
public class TestOnSpring { 
    @Value("${app.name}") 
    private String appName; 

    @Test 
    public void testValue(){ 
     System.out.println(appName); 
    } 
} 

и ApplicationTest.java как этот

@ComponentScan("org.nerve.jiepu") 
@EnableAutoConfiguration() 
public class ApplicationTest { 

    public static void main(String[] args) { 
     SpringApplication.run(ApplicationTest.class, args); 
    } 
} 

и мой POM, как это :

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.0.BUILD-SNAPSHOT</version> 
    </parent> 

Когда я запускаю тест, я получил ниже информацию об ошибке

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 more 

Но когда я запускаю это приложение в обычном режиме Java Application

@SpringBootApplication 
public class Application { 

    public static void main(String[] args){ 
     SpringApplication.run(Application.class, args); 
    } 
} 

Это хорошо работает!

Что в этом плохого? Как мне взять тест junit с Spring-boot? Спасибо большое!

+0

Вы используете ваш тестовый чехол неправильно. Вы используете Spring Boot, затем используете подходящий способ тестирования. Вместо 'ContextConfiguration' используйте' SpringApplicationConfiguration'. –

ответ

27

Вам нужно добавить

@PropertySource ("путь к классам: application.properties")

к классу, так что это будет забрать ваши нормальные конфигурации.

Если вам нужны различные конфигурации для тестирования вы можете добавить

@TestPropertySource (расположения = "путь к классам: test.properties")

Если не просто скопировать вставить конфигурационный файл вtest/resourcesпапка, затем ботинок отберет оттуда.

См. this.

+2

Большое спасибо за вашу помощь! Я добавляю 'code' @ TestPropertySource (locations = "classpath: test.properties") 'code', и он работает. Еще раз спасибо! –

+1

Чтобы уточнить, вам нужно добавить «@TestPropertySource ...» в ваш класс java, который запускает тест. –

Смежные вопросы