2013-01-12 9 views
3

Comme tant de gens avant moi sur stackoverflow je veux faire des tests junit pour mon application mongodb. Pour cela, je laisse courir une instance, afin que mes tests puissent se connecter. Mais je veux m'assurer que la base de données est dans un état vide au début du test. Depuis que j'utilise spring-mongodb, spring-test et toutes les choses amusantes du printemps, j'espérais trouver une configuration qui fait ça pour moi, jusqu'à présent sans aucun succès.Effacer mongodb en utilisant spring-mongodb

Quelqu'un peut-il me donner un indice sur la façon de l'appliquer de manière propre. Mon idée est un InitializingBean qui fait cela pour moi. Mais je ne suis pas vraiment content de cette solution. Aucune suggestion?

+0

Pour PHPUnit ce que je fais est de créer une nouvelle base de données appelée 'PHPUnit_tests' puis je drop it chaque test, Java devrait avoir une fonction similaire dans la classe de base de données qui représente une base de données MongoDB. – Sammaye

Répondre

5

Essayez ceci:

@Autowired 
org.springframework.data.mongodb.core.MongoTemplate mongoTemplate; 

..... 
mongoTemplate.getDb().dropDatabase(); 
3

mongoTemplate.getDb().dropDatabase(); peut aider si vous ne pourrez pas utiliser les index.

Si vous utilisez des index via spring-data-mongodb, par exemple @Index, dropDatabase() supprime également les index.

Ma solution est le nettoyage des documents:

private void cleanUp() { 
     for (String collectionName : mongoTemplate.getCollectionNames()) { 
      if (!collectionName.startsWith("system.")) { 
       mongoTemplate.getCollection(collectionName).remove(new BasicDBObject()); 
      } 
     } 
} 
0

premier

private @Autowired Mongo mongo; 
private @Autowired MongoDbFactory mongoDbFactory; 

puis

mongo.dropDatabase(mongoDbFactory.getDb().getName()); 
Questions connexes