Как вы получаете sessionFactory в тестовом случае Grails Geb / Spock? - PullRequest
3 голосов
/ 01 июня 2011

Я думаю, что мне нужно очистить сеанс гибернации в тесте GebSpec, и поэтому я хочу получить sessionFactory.

Похоже, что это должно быть введено, но когда я делаю что-то вроде этого: -

class MySpec extends GebSpec {
def sessionFactory
...
def "test session"(){
....do some setup
then: 
  assert sessionFactory != null
}

происходит сбой, когда sessionFactory имеет значение null.

1 Ответ

5 голосов
/ 01 июня 2011

Короткий ответ на мой вопрос: почему вы хотите это сделать, это функциональный тест, и он может быть удален от запущенных приложений JVM.

Причина в том, что я хочу проверить этот доменобъекты были обновлены, когда веб-вещи происходят.Люк Дейли любезно указал, что вы можете сделать это, используя плагин Grail для дистанционного управления (https://github.com/alkemist/grails-remote-control), что довольно здорово.Вы устанавливаете плагин, затем идете

 assert remote {
  MyDomainOb.findByName('fred') != null
 }

, и он отправляет это замыкание на сервер и возвращает результат, который вы можете проверить.Результат должен быть сериализуемым.

ОК, так что это один из способов - но удаленный плагин немного сложнее вернуть результаты для тестов, если у вас много сложных объектов, изменяющихся под капотом из-за доменной модели, котораянавязывается вам.Так как же do вы получаете тестовую сессию Hibernate, когда вы находитесь на той же JVM ??Например: -

Session currentSession

    def setup() {
        ApplicationContext context = (ApplicationContext) ServletContextHolder.getServletContext().getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
        SessionFactory sf = context.getBean('sessionFactory')
        currentSession = sf.getCurrentSession()
    }

Добавьте это в начало вашего GebSpec, и тогда вы сможете вызывать currentSession.clear () или currentSession.flush ()

Мне нужно было провести сеанс тестовобновите, так что currentsession.clear () был ответом.

Обратите внимание, что это не поможет вам, если тестируемая цель находится в отдельной виртуальной машине, поэтому вам придется использовать удаленный.

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