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 :
-
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
-
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; } }
-
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 ?