java - starter - spring test
@Value "No se pudo resolver el marcador de posiciĆ³n" en Spring Boot Test (2)
Necesitas agregar
@PropertySource ("classpath: application.properties")
a su clase, por lo que elegirá sus configuraciones normales.
Si necesita diferentes configuraciones para la prueba puede agregar
@TestPropertySource (locations = "classpath: test.properties")
Si no es así, simplemente copie y pegue su archivo de configuración en la carpeta de test/resources
, entonces booteará desde allí.
Ver this
Quiero tomar una prueba de Junit para Spring-boot como se muestra a continuación:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApplicationTest.class})
public class TestOnSpring {
@Value("${app.name}")
private String appName;
@Test
public void testValue(){
System.out.println(appName);
}
}
y ApplicationTest.java como este
@ComponentScan("org.nerve.jiepu")
@EnableAutoConfiguration()
public class ApplicationTest {
public static void main(String[] args) {
SpringApplication.run(ApplicationTest.class, args);
}
}
y mi POM asi
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.BUILD-SNAPSHOT</version>
</parent>
Cuando ejecuto la prueba, tengo debajo de la información de error
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
Pero cuando ejecuto esta aplicación como una aplicación Java normal
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
¡Funciona bien!
¿Qué tiene de malo? ¿Cómo debo tomar la prueba junit con Spring-boot? ¡Muchas gracias!
Puede utilizar el @SpringBootTest
que creará automáticamente el PropertySourcesPlaceholderConfigurer
.
Esto se describe en el capítulo Pruebas de la documentación de Spring Boot.