Groovy HTTPBuilder высмеивает ответ - PullRequest
9 голосов
/ 01 февраля 2012

Я пытаюсь выяснить, как написать свои тесты для службы, которую я собираюсь написать.

Служба будет использовать HTTPBuilder для запроса ответа от некоторого URL. Запрос HTTPBuilder должен только проверить ответ на успех или сбой. Реализация сервиса будет простой:

boolean isOk() {
    httpBuilder.request(GET) {
        response.success = { return true }
        response.failure = { return false }
    }
}

Итак, я хочу иметь возможность смоделировать HTTPBuilder, чтобы я мог установить в ответе либо успех, либо неудачу, чтобы я мог утверждать, что метод isOk моей службы возвращает True, если ответ успешен, и Ложь, если ответ не получен.

Может ли кто-нибудь помочь с тем, как я могу посмеяться над запросом HTTPBuilder и установить ответ в GroovyTestCase?

1 Ответ

11 голосов
/ 01 февраля 2012

Вот минимальный пример макета HttpBuilder, который будет обрабатывать ваш тестовый пример:

class MockHttpBuilder {
    def result
    def requestDelegate = [response: [:]]

    def request(Method method, Closure body) {
        body.delegate = requestDelegate
        body.call()
        if (result)
            requestDelegate.response.success()
        else
            requestDelegate.response.failure()
    }
}

Если поле result равно true, оно вызывает закрытие success, в противном случае failure.

РЕДАКТИРОВАТЬ: Вот пример использования MockFor вместо класса mock:

import groovy.mock.interceptor.MockFor

def requestDelegate = [response: [:]]
def mock = new MockFor(HttpBuilder)
mock.demand.request { Method method, Closure body ->
    body.delegate = requestDelegate
    body.call()
    requestDelegate.response.success() // or failure depending on what's being tested
}
mock.use {
    assert isOk() == true
}
...