2013-01-12 84 views
3

因为我之前有很多人在使用stackoverflow,我想为我的mongodb应用程序做junit测试。为此我让一个实例运行,所以我的测试可以连接。但是我想在开始测试时确保数据库处于空状态。使用spring-mongodb清除mongodb

由于我使用了spring-mongodb,spring-test和所有有趣的spring-things,我希望找到一个能够为我做到这一点的配置,直到现在,我仍然没有成功。

任何人都可以给我一个提示如何以一种干净的方式实现这一点。我的想法是一个InitializingBean,为我做这个。但我对这个解决方案并不满意。有什么建议么?

+0

对于PHPUnit的我要做的就是创建一个名为'PHPUnit_tests'新的数据库,然后我在每次测试中放弃它,Java应该在表示MongoDB数据库的数据库类中具有类似的功能。 – Sammaye

回答

5

试试这个:

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

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

mongoTemplate.getDb().dropDatabase(); 可以帮助,如果你不会使用索引。

如果通过spring-data-mongodb使用索引,例如@Index注释,则dropDatabase()也会丢弃索引。

我的解决办法是清理文件:

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

第一

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

然后

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