web-dev-qa-db-fra.com

Spring-boot application-test.properties

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.

6
FunWithJava

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.

19
pvpkiran