#mongodb #unit-testing #grails #groovy #grails-orm
#mongodb #модульное тестирование #grails #groovy #grails-orm
Вопрос:
Я начал использовать новую поддержку макетов в grails-datastore-gorm-mongodb. Мое приложение по умолчанию использует сопоставления доменов для использования ссылок при сохранении связей с mongodb. Мне нужно найти способ заставить mocked 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:
Похоже MongoDbTestMixin
, предлагает несколько вариантов mongoDomain
метода:
mongoDomain(Mongo mongo, Collection<Class> persistentClasses)
— Настраивает GORM для домена MongoDB для данного экземпляра Mongo и классов доменаmongoDomain(Map config, Collection<Class> persistentClasses)
— Настраивает GORM для домена MongoDB для заданной конфигурации и классов домена
2-й вариант позволяет передать карту конфигурации, которая позволяет настроить mongo на использование dbrefs (в противном случае используется пустая конфигурация, см. MongoDbDataStoreSpringInitializer ). Однако этот метод не позволяет передать экземпляр Fongo.
Вы можете попытаться:
- Попросите команду Grails добавить метод, который сочетает в себе оба варианта (запрос на извлечение?)
- Расширьте MongoDbTestMixin или создайте свой собственный mixin