Тестирование Grails withCriteria

Я хотел бы протестировать "withCriteria" закрытие и не уверен, как пойти об этом. Я вижу, как дразнить вызов withCriteria, но не протестировать код в рамках закрытия. При запущении теста, который выполняет "withCriteria", я продолжаю получать MissingMethodException, даже при том, что код хорошо работает под нормальным потоком выполнения. Какие-либо идеи?Спасибо! Steve

7
задан ptsw 24 May 2010 в 17:46
поделиться

3 ответа

Я бы не пошел по этому пути. Вместо этого я бы переместил запрос в класс предметной области как статический метод поиска и протестировал бы его непосредственно в интеграционном тесте с реальными данными. Затем вы можете легко имитировать вспомогательный метод, когда он вызывается в тесте контроллера или службы.

class YourDomainClass {

...
   static List<YourDomainClass> findFooBar() {
      YourDomainClass.withCriteria {
         ...
      }
   }
}

Затем в модульном тесте:

def results = [instance1, instance2, instance3]
YourDomainClass.metaClass.static.findFooBar = { -> results }

Таким образом вы проверяете, что запрос работает с базой данных в памяти в интеграционном тесте, но его легко смоделировать в модульных тестах.

14
ответ дан 6 December 2019 в 12:46
поделиться

В дополнение к ответу Берта, ознакомьтесь с именованными запросами, как описано здесь:

http://blog.springsource.com/2010/05/24/more-grails-1-3-features/

Затем вы можете высмеять доступ к свойству/методу в ваших модульных тестах, как описано Бертом.

1
ответ дан 6 December 2019 в 12:46
поделиться

В настоящее время нет фиктивной реализации критериев Hibernate. Вам нужно будет использовать интеграционные тесты. Однако рекомендация Берта сделать этот метод статического поиска хороша для организации кода. Вам также следует взглянуть на именованные запросы, описанные на http://www.grails.org/1.2+Release+Notes , чтобы найти хороший синтаксис для этого.

0
ответ дан 6 December 2019 в 12:46
поделиться