2011-07-20 1 views
3

J'utilise Grails 1.3.2 dans NetBeans. J'ai un test unitaire très simple qui échoue avec cette erreur:L'appel de .save() sur la classe de domaine échoue sans la signature de la méthode .save() dans le test unitaire

No signature of method: com.maxrecall.maxrequire.domain.Release.save() is applicable for argument types: (java.util.LinkedHashMap) values: [[flush:true]] Possible solutions: wait(), any(), wait(long), isCase(java.lang.Object), use([Ljava.lang.Object;), sleep(long)

Le code correspondant est:

Release rel = new Release() 
... 
rel.save(flush:true) 

Le même code fonctionne dans BootStrap.groovy. J'ai essayé différentes variations sur .save() (.Save avec et sans paramètres.

Répondre

7

Il est un test unitaire, donc il n'y a pas de Spring, Hibernate, etc. vous devez railler le comportement que vous voulez.

Si vous testez la persévérance, vous devez convertir le test un test d'intégration, car tester la persistance avec des tests unitaires ne fait que tester le framework de simulation: un test d'intégration utilise au minimum une base de données en mémoire, al Bien que vous puissiez facilement changer cela pour une instance de test de MySQL/Oracle/etc. Si vous testez des contrôleurs ou d'autres utilisateurs de vos classes de domaine et que vous voulez simplement qu'ils fonctionnent pour vous permettre de tester la classe actuelle, utilisez mockDomain et les autres méthodes fictives disponibles dans les classes de base de test des unités Grails.

Ceci est décrit en détail dans la documentation - voir http://grails.org/doc/latest/guide/9.%20Testing.html

2

Il n'y a pas Grails magique autour d'une unité test (il est là dans un test d'intégration). Voir « Comprendre mockDomain() » here ou lire le Grails docs.

Questions connexes