Регистрация альтернативной / фиктивной службы Impl во время тестирования в Grails? - PullRequest
1 голос
/ 03 декабря 2011

Я пишу функциональные тесты (geb + spock) для приложения Grails и хочу, чтобы приложение разрешало «фиктивную» реализацию Службы, когда приложение загружается во время тестирования.

«реальная» версия сервиса связывается с удаленным веб-сервисом.

В идеале, я бы имел фиктивную реализацию этого сервиса, которая возвращает фиктивные данные (вместо того, чтобы идти в реальный, удаленный веб-сервис), и иметьэтот сервис вводится во время выполнения функционального теста.

В настоящее время сервис внедряется в контроллеры на основе стандартного метода именования, например:

class BikeController {
    def myService
    def index = { render myService.doSomething() as JSON }
}

Возможно ли иметь что-тов моей конфигурации, например:

environments {
    test {
        /* register myMockService to be used where myService normally would */
    }
}

(Во время модульного тестирования я просто заменяю методы и выполняю магию метакласса для достижения этих целей)

Если мне нужно создать интерфейс, хорошо, но все жекак все это подключить?Спасибо!

1 Ответ

1 голос
/ 03 декабря 2011

Блок environments не поддерживается в grails-app/conf/spring/resources.groovy, но вы можете выполнить явную проверку среды:

import grails.util.Environment

beans = {

    if (GrailsUtil.environment == 'test') {
       myService(com.myapp.MyMockService)
    }
}

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

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