6 votes

Comment relier automatiquement les beans à la classe de test en utilisant @SpringBootTest ?

J'ai une classe de test d'intégration annotée avec @SpringBootTest qui démarre le contexte complet de l'application et me permet d'exécuter mes tests. Cependant, je ne parviens pas à @Autowired dans la classe de test elle-même. Au lieu de cela, j'obtiens une erreur :

Aucun haricot qualifiant de type 'my.package.MyHelper' n'est disponible".

Si je ne @Autowire pas ma classe d'aide, mais que je garde le code directement dans la fonction setUp, le test fonctionne comme prévu.

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Application.class)
public class CacheControlTest {

    @Autowired
    private MyHelper myHelper;

    @Before
    public void setUp() {
        myHelper.doSomeStuff();
    }

    @Test
    public void test1() {
        // My test
    }
}

Comment puis-je utiliser le câblage automatique de Spring à l'intérieur de la classe de test tout en utilisant également @SpringBootTest ?

En suivant les conseils de @user7294900 ci-dessous, en créant un fichier @Configuration et l'ajouter en tête de CacheControlTest fonctionne :

@ContextConfiguration(classes = { CacheControlTestConfiguration.class })

Cependant, existe-t-il un moyen de conserver la configuration à l'intérieur du fichier CacheControlTest elle-même ? J'ai essayé de l'ajouter à l'intérieur de ma classe de test :

public class CacheControlTest {

    @TestConfiguration
    static class CacheControlTestConfiguration {
        @Bean
        public MyHelper myHelper() {
            return new MyHelper();
        }
    }

}

Et

public class CacheControlTest {

    @Configuration
    static class CacheControlTestConfiguration {
        @Bean
        public MyHelper myHelper() {
            return new MyHelper();
        }
    }
}

Mais ils ne semblent pas avoir d'effet. J'obtiens toujours la même erreur. Le même bloc de configuration fonctionne cependant lorsqu'il est placé dans un fichier séparé comme indiqué ci-dessus.

6voto

user7294900 Points 16410

Ajoutez la ContextConfiguration pour votre classe de test :

@ContextConfiguration(classes = { CacheControlTestConfiguration.class })

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X