1

J'ai un projet de démarrage de printemps, la version 1.5.4, avec une classe de configuration MongoDB:Spring Boot 1.5.4: exclure la classe de configuration test unitaire

@Configuration 
public class MongoConfig { 

@Value("${spring.data.mongo.client.uri:mongodb://localhost:27017/database}") 
private String mongoURI; 

@Bean 
public MongoDbFactory mongoFactory() throws UnknownHostException{ 
    return new SimpleMongoDbFactory(new MongoClientURI(mongoURI)); 
} 

@Bean 
public MongoTemplate mongoTemplate() throws UnknownHostException, MongoException{ 
    return new MongoTemplate(mongoFactory()); 
} 
} 

Dans mon test d'intégration que je veux utiliser intégré Mongo (https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo).

Le problème est que la classe de configuration MongoDb commence avant l'initialisation de Embedded mongo et essaie de se connecter à la base de données, mon test échoue donc. Si je supprime la classe MongoConfig, tous les tests fonctionnent bien. Comment est-ce que je peux l'exclure seulement dans mon exécution de test?

+0

Je sais que ce n'est pas votre question, mais jetez un oeil à testContainers: https://www.testcontainers.org/ c'est la solution que j'utilise pour mon test (principalement des tests d'intégration), un petit tutoriel ici : https://areguig.github.io/test-springboot-apps-using-testContainers-and-spock/ –

Répondre

1

Veuillez vous reporter aux réponses ici. Il a deux façons d'exclure les configurations.

Spring boot: apply @Configuration to certain package only

Mise à jour 1:

Alternativement, la façon la plus efficace que je peux penser est d'utiliser des profils de printemps et charger le profil pour les tests

Définir votre classe TestConfiguration et importez votre classe de test.

@RunWith(SpringRunner.class) 
@SpringBootTest 
@Import(MyTestConfiguration.class) 
public class MyTests { 

    @Test 
    public void exampleTest() { 
     ... 
    } 

} 

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-detecting-config

Mise à jour 2: Pour EmbeddedMongoAutoConfiguration s'il vous plaît se référer les réponses détaillées ici.

How do you configure Embedded MongDB for integration testing in a Spring Boot application?

+0

Je ne veux pas changer ma classe d'application principale juste pour le test unitaire. – sintetico82

+0

@Import (MyTestsConfiguration.class) est une bonne solution, mais j'ai trouvé un système qui évite juste de charger des classes inutiles pour mon test. – sintetico82

+0

Le problème est que je ne sais pas comment être mon * MyTestsConfiguration.class *, parce que je veux activer le * EmbeddedMongoAutoConfiguration.class * – sintetico82

0

Je l'ai résolu avec cette configuration sur ma classe de test:

@RunWith(SpringRunner.class) 
@ComponentScan({"it.app.server.dal","it.app.server.listener"}) 
@DataMongoTest() //mongoDB 
public class ListenerTests { 
    ... 
} 

L'annotation @DataMongoTest() charger mon Embbedded MongoDB et @ComponentScan je peux charger la services et référentiels dont j'ai besoin dans mon test.

+0

Cette solution ne fonctionne pas si je veux tester un contrôleur qui accède à mongodb. – sintetico82