Как часть проекта Grails, в настоящее время я расширяю свой набор тестов на такие компоненты, для работы которых требуется полная среда, например, пользовательские запросы HQL и критерии, проблемы, связанные с сеансом, и т. Д. Я использую интеграционные тесты.
У нас уже есть довольно большое количество модульных тестов (> 500), где мы использовали для имитации методов, которые по умолчанию не имеют макетного аналога Grails (например, withCriteria
, withNewSession
и т. Д.).) используя вспомогательные функции, подобные этой:
static mockCriteria(Class clazz, returnValue)
{
def myCriteria = new Expando()
myCriteria.list = {Closure cls -> returnValue}
myCriteria.get = {Closure cls -> returnValue}
clazz.metaClass.static.createCriteria = { -> myCriteria }
}
Затем можно было протестировать код следующим образом:
mockCriteria(MyClass, [result])
assert myClass.createCriteria.list({ ... }) == [result]
До сих пор мне всегда удавалось удовлетворить свои потребности, используя этот подход.
Теперь я хочу добавить интеграционные тесты, которые фактически проверяют, как ведут себя методы, которые используют критерии и HQL-запросы, чтобы упростить рефакторинг этих запросов.Я застрял в том факте, что createCriteria
заменяется в моих тестах и не восстанавливает их исходный код после фазы модульных тестов, что мешает мне тестировать их на этапе интеграции.
Как вы решаетепроблема критериев насмешки (или запросов HQL и т. д.), позволяющая вернуть исходное поведение в интеграционные тесты?
РЕДАКТИРОВАТЬ: К сожалению, обновление до Grails 2 не является вариантом.