вызов метода .save () в доменном классе завершился неудачно без подписи метода .save () в модульном тесте - PullRequest
3 голосов
/ 21 июля 2011

Я использую Grails 1.3.2 в NetBeans.У меня есть очень простой модульный тест, который не проходит с этой ошибкой:

Нет сигнатуры метода: com.maxrecall.maxrequire.domain.Release.save () применим для типов аргументов: (java.util).LinkedHashMap) значения: [[flush: true]] Возможные решения: wait (), any (), wait (long), isCase (java.lang.Object), use ([Ljava.lang.Object;), sleep (long)

Соответствующий код:

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

Этот же код работает в BootStrap.groovy.Я пробовал различные варианты .save () (.Save с параметрами и без параметров.

Ответы [ 2 ]

7 голосов
/ 21 июля 2011

Это юнит-тест, так что здесь нет Spring, Hibernate и т. Д. Вы должны издеваться над поведением, которое вы хотите.

Если вы тестируете персистентность, вам нужно конвертировать тест в интеграционный тест, поскольку тестирование персистентности с помощью модульных тестов просто тестирует фальшивую среду. Интеграционный тест использует как минимум базу данных в памяти, хотя вы можете легко переключить ее для тестового экземпляра MySQL / Oracle / и т. Д.

Если вы тестируете контроллеры или других пользователей классов вашего домена и просто хотите, чтобы они работали, чтобы вы могли сосредоточиться на тестировании текущего класса, используйте mockDomain и другие методы mock, доступные в базовых классах модульного тестирования Grails.

Все это подробно описано в документации - см. http://grails.org/doc/latest/guide/9.%20Testing.html

2 голосов
/ 21 июля 2011

В тесте unit нет волшебства Грааля (он есть в интеграционном тесте).См. «Понимание mockDomain ()» здесь или прочитайте документы Grails .

...