Как проверить запрос критерия Грааля? - PullRequest
7 голосов
/ 04 июня 2011

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

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

Я пытался смоделировать домен с помощьюmockDomain(domain,list) и настройку домена для теста для использования в setUp(), затем вызов критериев, и я ничего не получаю.Я сделал похожий findBy здесь и получил результаты, но не совсем те, которые я искал.Я почти уверен, что это не только мой запрос, но критерии, которые я читал в нескольких местах, не работают в сервисном тестировании.До сих пор запрос работал для меня в приложении, но я хочу провести несколько тестов, к которым я смогу обратиться в случае изменения моей кодовой базы.

Я действительно сделал то, что многие предложили и вытащиликод для запроса и сделал его статическим методом в моем домене, чтобы я мог смоделировать его для тестов, которые его используют, но теперь я застрял в том, как на самом деле проверить эту часть.Нужно ли запускать приложение и просто выполнять функциональное тестирование с этой точки зрения, или есть какой-то способ, которым я мог бы сделать это в модульном / интеграционном тестировании Grails?Я опубликую свой запрос ниже.

static Attribute getDefinitionsUsingCriteria(List categoryNames, List types){
        def definitions = Definition.withCriteria() {
            and {
                'in'('type', types)
                if (categoryNames) {
                    categories {
                        'in'('name', categoryNames)
                    }
                }
            }
        }
        return definitions
    }

Определения имеют строковый тип свойства и имеют категории свойств типа Set, что каждый элемент в этом наборе имеет свойство String name.

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

JR.

Ответы [ 3 ]

7 голосов
/ 04 июня 2011

В одну сторону: переместить тест из папки test/unit в test/integration.Критерии не будут работать в модульном тестировании (там нет Hibernate), но будут в интеграции.Никогда не используйте mockDomain() в интеграционных тестах.

Примечание: не делайте метод статичным - это только усложняет тестирование.

Второй способ: в модульных тестах - используйте mockDomain().Просто полагайтесь на то, что логика довольно проста, и тестируйте все, кроме метода.Переопределите это в setUp() как:

Definition.metaClass.getDefinitionsUsingCriteria = { List categoryNames, List types ->
    delegate.findAll{ (it.type in types) && 
        (it.categories.find { c -> c in categoryNames }) 
    }
}
3 голосов
/ 07 марта 2012

Grails 2.0.1 теперь имеет собственный @Mock для критериев тестирования, но groupProperty еще не реализован.

Я написал плагин для критериев критериев (с groupProperty)

https://github.com/fabiooshiro/plastic-criteria

работает в 1.3.7

0 голосов
/ 15 августа 2013

Критерии поддерживаются начиная с грааля 2.2. См. «Модульное тестирование GORM» на Что нового в Grails 2.2

...