J'écris un Spec Spock (test unitaire) pour un service Grails 1.3.5, et j'ai couru à travers l'erreur suivante:Quelles sont les restrictions de la méthode mockDomain() de Grails?
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)
Auparavant, ce test a réussi, mais le défaut a eu lieu quand je modifié mon service pour inclure le tri des résultats dans la méthode getThings()
.
class MyService {
static transactional = true
static getThings() {
Thing.findAll(sort: 'index', order: 'asc')
}
}
Cela semble encore fonctionner lorsque l'application est exécutée, alors je soupçonne que c'est une limitation de la mise en œuvre de mockDomain()
.
class MyServiceSpec extends UnitSpec {
def 'mockDomain has some limits, i suspect'() {
given:
mockDomain(Thing)
def myService = new MyService()
when:
myService.getThings()
then:
true
}
}
Donc ma question est-ce que leurs différences dans les méthodes ajoutées à une classe de domaine en utilisant mockDomain()
plutôt que d'utiliser la vraie classe de domaine lors de l'exécution? Si c'est vrai, que sont-ils?
Je voulais tagger avec SPOCK mais je n'ai pas assez de rep pour créer l'étiquette. – Armand