J'essaie de tester l'unité l'application Spring-Boot en utilisant Junit. J'ai placé l'application-test.properties sous src/test/resources. J'ai une classe ApplicationConfiguration qui lit le fichier application.properties.
Ma classe de test ressemble à ceci
@RunWith(SpringRunner.class)
@SpringBootTest(classes=ApplicationConfiguration.class)
@TestPropertySource(locations = "classpath:application-test.properties")
@ActiveProfiles("test")
public class TestBuilders {
@Autowired
private ApplicationConfiguration properties;
Quand j'essaye de lire les propriétés, c'est toujours nul.
Ma classe ApplicationConfiguration ressemble à ceci
@Configuration
@ConfigurationProperties
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource(value="file:config.properties", ignoreResourceNotFound =
true)})
public class ApplicationConfiguration{
private xxxxx;
private yyyyy;
J'ai essayé toutes les manières possibles que j'ai trouvées sur google .. Pas de chance. Veuillez aider! Merci d'avance.
Le problème est que vous n'avez pas @EnableConfigurationProperties
sur votre classe de test.
Lorsque vous chargez l'application, elle démarre à partir de la classe principale (celle qui a @SpringBootApplication
) où vous pourriez avoir @EnableConfigurationProperties
et donc cela fonctionne lorsque vous démarrez l'application.
Alors que lorsque vous exécutez le test avec uniquement la classe ApplicationConfiguration
comme vous l'avez spécifié ici
@SpringBootTest(classes=ApplicationConfiguration.class)
Spring ne sait pas qu'il doit activer les propriétés de configuration et donc les champs ne sont pas injectés et donc nuls. Mais le printemps lit votre application-test.properties
fichier. Cela peut être confirmé en injectant simplement la valeur directement dans votre classe de test
@Value("${xxxxx}")
private String xxxxx;
Ici, la valeur est injectée. Mais pour injecter dans une classe avec ConfigurationProperties
vous devez l'activer en utilisant @EnableConfigurationProperties
Mettez @EnableConfigurationProperties
sur votre classe de test et tout fonctionne bien.