2016-04-18 2 views
0

Я пишу тесты Junit для проекта Grails.Grails spock- как насмехаться/заглушить конкретный метод класса

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

Здесь я пытаюсь протестировать следующий метод.

Но я хочу высмеять/заглушить метод rest.post. Я не хочу, чтобы вызываемый фактический url прошел.

def RestResponse restPost(String url, Map headerMap, Map jsonDataMap) { 
    RestBuilder rest = new RestBuilder() 
    RestResponse response = rest.post(url) { 
     headerMap.each { k, v -> header(k, v) } 
     header('contentType', 'application/json') 
     header('Accept-API-Version', 'resource=2.0,protocol=1.0') 
     if (jsonDataMap) 
      json(jsonDataMap) 
    } 
    response 
} 

Я пробовал с помощью MockFor. Он вызывает фактический url.

void "test restPost"() { 
    setup: 
    RestResponse resMock = new RestResponse() 
    def httpBuildMock = new MockFor(RestBuilder) 
    httpBuildMock.demand.post(_) >> resMock 

    when: 
    def url = "http://testme" 
    def headerMap = [ 
      'Authorization': 'Basic ' + 'encodedStr' 
    ] 
    def dataMap = [ 
      'operation': 'replace', 
      'field' : 'userPassword', 
      'value' : 'devicePassword' 
    ] 
    RestResponse res = service.restPost(url, headerMap, dataMap) 

    then: 
    res 
} 

Итак, как насмехаться/заглушить определенный метод класса?

ответ

1

Вы можете создать отдельный метод для создания RestBuilder так createRestBuilder, а затем возвращают макет каждый раз этот метод называется:

def RestResponse restPost(String url, Map headerMap, Map jsonDataMap) { 
    RestBuilder rest = createRestBuilder() 
    RestResponse response = rest.post(url) { 
     headerMap.each { k, v -> header(k, v) } 
     header('contentType', 'application/json') 
     header('Accept-API-Version', 'resource=2.0,protocol=1.0') 
     if (jsonDataMap) 
      json(jsonDataMap) 
    } 
    response 
} 

затем определить сервис с

def service = Spy(ServiceClass) { 
    // stub a call on the same object 
    createRestBuilder() >> Mock(RestBuilder) 
} 
+2

Или создать фабрику боб впрыскивается весной. Это позволяет избежать использования Spy для тестируемого вами класса. – loteq

Смежные вопросы