Я пишу Spock Spec (модульный тест) для Сервиса в Grails 1.3.5, и я столкнулся со следующей ошибкой:
No signature of method: myapp.Thing.findAll() is applicable for argument types: (java.util.LinkedHashMap) values: [[sort:index, order:asc]] Possible solutions: findAll(), findAll(groovy.lang.Closure), find(groovy.lang.Closure), getAll(java.util.List), getAll([Ljava.lang.Object;)
groovy.lang.MissingMethodException: No signature of method: myapp.Thing.findAll() is applicable for argument types: (java.util.LinkedHashMap) values: [[sort:index, order:asc]]
Possible solutions: findAll(), findAll(groovy.lang.Closure), find(groovy.lang.Closure), getAll(java.util.List), getAll([Ljava.lang.Object;)
at grails.test.MockUtils.addDynamicFinders_closure56(MockUtils.groovy:641)
at myapp.MyService.getCards(MyService.groovy:8)
at myapp.MyServiceSpec.getCards returns empty map if no cards or statuses are available(MyServiceSpec.groovy:13)
Ранее этот тест проходил, но произошел сбой, когда я изменил свой Сервис для включения сортировки результатов в методе getThings()
.
class MyService {
static transactional = true
static getThings() {
Thing.findAll(sort: 'index', order: 'asc')
}
}
По-прежнему это работает, когда приложение запущено, поэтому я подозреваю, что это ограничение реализации mockDomain()
.
class MyServiceSpec extends UnitSpec {
def 'mockDomain has some limits, i suspect'() {
given:
mockDomain(Thing)
def myService = new MyService()
when:
myService.getThings()
then:
true
}
}
Таким образом, мой вопрос заключается в том, отличаются ли они в методах, добавленных в класс домена с помощью mockDomain()
, в отличие от использования реального класса домена во время выполнения? Если да, то что они?