MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment faire en sorte que les tests junit utilisent le mongoDB intégré dans une application springboot ?

Une alternative serait d'exécuter l'intégralité de l'application Spring Boot en test. Dans ce cas, votre application Spring Boot sera découverte automatiquement et mongoDB intégré sera téléchargé et démarré par Spring Boot

@RunWith(SpringRunner.class)
@SpringBootTest
public class YourSpringBootApplicationTests {

08:12:14.676 INFO EmbeddedMongo:42 - note :noprealloc peut nuire aux performances dans de nombreuses applications =52299 08:12:22.005 INFO connexion :71 -Connexion ouverte [connectionId{localValue:2, serverValue:2}] tolocalhost :52299

Dans le cas de votre exemple, vous pouvez modifier le code afin de démarrer Mongo embarqué sur un port différent :

  1. ajouter le fichier test/resoures/test.properties afin de remplacer les propriétés de application.properties

    mongo.db.name=person_testDB
    mongo.db.url=localhost
    mongo.db.port=12345
    
  2. modifier MongoDBConfig :ajouter le champ MONGO_DB_PORT

    @EnableMongoRepositories
    public class MongoDBConfig {
        @Value("${mongo.db.url}")
        private String MONGO_DB_URL;
    
        @Value(("${mongo.db.port:27017}"))
        private int MONGO_DB_PORT;
    
        @Value("${mongo.db.name}")
        private String MONGO_DB_NAME;
    
        @Bean
        public MongoTemplate mongoTemplate() {
            MongoClient mongoClient = new MongoClient(MONGO_DB_URL, MONGO_DB_PORT);
            MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, MONGO_DB_NAME);
            return mongoTemplate;
        }
    }
    
  3. modifier la classe de test :supprimer l'annotation @DataMongoTest. Cette annotation force le démarrage de l'instance mongoDB intégrée

    static MongodExecutable mongodExecutable;
    
    @BeforeClass
    public static void setup() throws Exception {
        MongodStarter starter = MongodStarter.getDefaultInstance();
        String bindIp = "localhost";
        int port = 12345;
        IMongodConfig mongodConfig = new MongodConfigBuilder()
                .version(Version.Main.PRODUCTION)
                .net(new Net(bindIp, port, Network.localhostIsIPv6()))
                .build();
        mongodExecutable = null;
        try {
            mongodExecutable = starter.prepare(mongodConfig);
            mongodExecutable.start();
        } catch (Exception e){
            // log exception here
            if (mongodExecutable != null)
                mongodExecutable.stop();
        }
    }
    
    @AfterClass
    public static void teardown() throws Exception {
        if (mongodExecutable != null)
            mongodExecutable.stop();
    }
    

Une autre façon consiste à utiliser MongoRepository et init Embedded Mongo dans le cadre de la classe de test @Configuration :elle est décrite ici :Comment configurer Embedded MongDB pour les tests d'intégration dans une application Spring Boot ?