在Grails单元测试中将默认映射应用于模拟Mongo域

时间:2014-06-20 19:20:52

标签: mongodb unit-testing grails groovy gorm

我已经开始在grails-datastore-gorm-mongodb中使用新的模拟支持。我的应用程序默认域映射在将关系持久保存到mongodb时使用引用。我需要找到一种方法让嘲笑的mongo做同样的事情。如何在单元测试中应用相同的默认映射?

在Config.groovy中,它看起来像这样:

// configure mongo to use dbrefs:
grails.mongo.default.mapping = { 
  '*'(reference: true)
}

这是我目前使用的代码示例:

import spock.lang.*
import grails.test.mixin.mongodb.MongoDbTestMixin
import com.github.fakemongo.Fongo

@Mixin([MongoDbTestMixin])
class MySpec extends Specification {
  def setup() {
    mongoDomain(new Fongo("test").mongo, [ MyDomain ])
    new MyDomain(name: 'domain').save(validate: false, flush: true)
  }
}

如何将该配置应用于此测试代码?

我使用的是Grails 2.3.9和mongodb 3.0.1插件。

1 个答案:

答案 0 :(得分:0)

看起来MongoDbTestMixin提供了一些mongoDomain方法:

  1. mongoDomain(Mongo mongo, Collection<Class> persistentClasses) - 为给定的Mongo实例和域类设置MongoDB域的GORM
  2. mongoDomain(Map config, Collection<Class> persistentClasses) - 为给定的配置和域类设置MongoDB域的GORM
  3. 第二个选项允许传递配置映射,允许配置mongo以使用dbrefs(否则使用空配置,请参阅MongoDbDataStoreSpringInitializer)。但是,此方法不允许您传递Fongo实例。

    您可以尝试:

    1. 请Grails团队添加一个结合了两个选项的方法(拉取请求?)
    2. 扩展MongoDbTestMixin或创建自己的mixin