it-swarm.com.de

@Value "Platzhalter konnte nicht aufgelöst werden" im Spring Boot Test

Ich möchte einen Junit-Test für Spring-Boot wie folgt machen:

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

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

und ApplicationTest.Java gefällt das

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

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

und mein POM gefällt das:

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

Wenn ich den Test durchführe, erhalte ich folgende Fehlerinformationen

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

Aber wenn ich diese Anwendung wie gewohnt ausführe Java Application

@SpringBootApplication
public class Application {

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

Es funktioniert gut

Was stimmt damit nicht ? Wie mache ich den Junit-Test mit Spring-Boot? Vielen Dank!

25
集成显卡

Sie müssen hinzufügen

@PropertySource ("Klassenpfad: application.properties")

zu Ihrer Klasse, so wird es Ihre normalen Konfigurationen auswählen.

Wenn Sie zum Testen unterschiedliche Konfigurationen benötigen, können Sie diese hinzufügen

@TestPropertySource (locations = "classpath: test.properties")

Wenn nicht einfach kopieren, fügen Sie Ihre Konfigurationsdatei in test/resources Ordner , dann wird von dort booten.

Siehe this .

45

Du kannst den ... benutzen @SpringBootTest das wird das PropertySourcesPlaceholderConfigurer automatisch erstellen.

Dies wird im Kapitel Testen der Spring Boot-Dokumentation beschrieben.

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-configfileapplicationcontextinitializer-test-utility

9
nucatus