2014-12-05 88 views
0

我正在构建一个春季启动应用程序,使用MongoDB的Spring数据存储库。我试图创建一个Spock函数Spec来测试我的存储库,但我无法弄清楚为测试准备初始化Mongo DB的适当方式。到目前为止,我已经尝试了以下内容:初始化MongoDB的春季启动测试

  1. 什么都不做 - 这导致从测试中使用相同的数据库来测试我的测试失败之后。
  2. 测试之前删除数据库 - 这导致索引丢失,我无法测试我的唯一索引。

这就是我与删除数据库做:

@ContextConfiguration(classes = MyApp, loader = SpringApplicationContextLoader) 
@ActiveProfiles('test') 
class UserRepositoryTest extends Specification { 

    @Shared 
    boolean mongoReset = false 

    @Autowired 
    MongoTemplate mongoTemplate 

    @Autowired 
    UserRepository userRepository 

    void setup() { 
     if (!mongoReset) { 
      mongoTemplate.getDb().dropDatabase() 
      mongoReset = true 
     } 
    } 

} 

理想情况下,我想能够使用类似于提供JPA存储库data.sql方法的东西。

回答

3

我们通常建议使用存储库来擦除数据库(即调用userRepository.deleteAll())。删除数据库具有清除在上下文引导时间期间可能创建的所有索引的缺点。