Как использовать executeQuery в тесте Grails? - PullRequest
5 голосов
/ 17 февраля 2012

Как использовать executeQuery в тесте Grails?

A error : groovy.lang.MissingMethodException: No signature of method ***.executeQuery() is applicable for argument types: () values: []

Я уже назвал mockDomain.

Кстати, это в модульном тесте.

Спасибо!

Ответы [ 3 ]

14 голосов
/ 17 февраля 2012

В модульных тестах пока нет поддержки запросов HQL, но мы над этим работаем.Но вы не должны делать тесты на постоянство с издевательствами.Тесты на постоянство следует выполнять для базы данных в интеграционном тесте.

Я обычно перемещаю запросы HQL в класс домена как статические методы запросов.Таким образом, их легко смоделировать в модульном тесте контроллера, службы и т. Д., А затем я тестирую метод как часть теста интеграции классов домена.

Например, у меня будет

class User {
   String username
   String password
   ...

   static List findAllUsersBlahBlah(String foo, boolean bar) {
      executeQuery('from User u where ...')
   }
}

Затем в модульном тесте я могу смоделировать этот метод с поддельными данными, поскольку меня не волнует постоянство в модульном тесте контроллера - я знаю, что он правильно протестирован в правильном месте, и я хочу сосредоточиться натестируемый класс, а не его сотрудники:

def users = [new User(...), new User(...)]
User.metaClass.static.findAllUsersBlahBlah = { String foo, boolean bar -> users }
8 голосов
/ 18 февраля 2012

Мы успешно смоделировали executeQuery с Grails 2.0 в нашем проекте

@TestFor(BookController)
@TestMixin([DomainClassUnitTestMixin,ServiceUnitTestMixin])
@ConfineMetaClassChanges([Book])
class BookControllerSpec extends Specification{
   mockDomain(Book)
   Book.metaClass.static.executeQuery = {a,b,c-> return [Book]}
0 голосов
/ 23 декабря 2016

В Grails 2.5.4 вы можете использовать GroovyMock для имитации статических методов, реализованных в Java:

 GroovyMock(Book, global: true)

Я только что проверил - работает и для _.executeQuery()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...