Je veux faire un test Junit pour Spring-boot comme ci-dessous:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApplicationTest.class})
public class TestOnSpring {
@Value("${app.name}")
private String appName;
@Test
public void testValue(){
System.out.println(appName);
}
}
et ApplicationTest.Java comme celui-ci
@ComponentScan("org.nerve.jiepu")
@EnableAutoConfiguration()
public class ApplicationTest {
public static void main(String[] args) {
SpringApplication.run(ApplicationTest.class, args);
}
}
et mon POM comme ça:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.BUILD-SNAPSHOT</version>
</parent>
Lorsque j'exécute le test, j'ai obtenu des informations d'erreur ci-dessous
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
Mais lorsque j'exécute cette application normalement Java Application
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
Ça marche bien!
Qu'est ce qui ne va pas avec ça ? Comment dois-je faire le test junit avec Spring-boot? Merci beaucoup!
Vous devez ajouter
@PropertySource ("classpath: application.properties")
à votre classe, il choisira donc vos configurations normales.
Si vous avez besoin de différentes configurations pour le test, vous pouvez ajouter
@TestPropertySource (locations = "classpath: test.properties")
Si ce n'est pas simplement copier, collez votre fichier de configuration dans test/resources
dossier , puis le démarrage choisira à partir de là.
Voir ceci .
Vous pouvez utiliser le @SpringBootTest
qui créera automatiquement le PropertySourcesPlaceholderConfigurer
.
Ceci est décrit dans le chapitre Testing de la documentation Spring Boot.