2014-09-22 5 views
0

У меня есть следующие услуги:Grails: Дразнящая услугу и его метод внутри другого сервиса

class MyMainService { 

    def anotherService; 

    def method1("data") { 
     def response = anotherService.send("data") 
    } 

} 

anotherService является бобом определен в Грааль resources.groovy

Я хочу модульное тестирование method1 в MyMainService насмехаясь над anotherService.send («данные»)

Как я издеваться anotherService боб и возвращаемое значение это отправить() метод и ввести в мой MyMainServiceSpec тест-класс?

Я использую grails 2.3.8.

Спасибо.

ответ

2

Вы можете использовать стандартную фальшивую фреймворк, встроенную в гравюры, или выбрать для использования фальшивый стиль Spock. Я предпочитаю структуру Spock, но выбор за вами. Вот пример того, как это сделать с помощью метода grails mockFor, который доступен в спецификациях вашего устройства.

Чтобы проверить MyMainService с дефолтами по гранулам по умолчанию.

@TestFor(MyMainService) 
class MyMainServiceSpec extends Specification { 

    @Unroll("method1(String) where String = #pData") 
    def "method1(String)"() { 
     given: "a mocked anotherService" 
     def expectedResponse = [:] // put in whatever you expect the response object to be 

     def mockAnotherService = mockFor(AnotherService) 
     mockAnotherService.demand.send { String data -> 
      assert data == pData 
      return expectedResponse // not clear what a response object is - but you can return one. 
     } 
     service.anotherService = mockAnotherService.createMock() // assign your mocked Service 

     when: 
     def response = service.method1(pData) 

     then: 
     response 
     response == expectedResponse 

     where: 
     pData << ["string one", "string two"] 
    } 
} 
+1

Привет, ребята, у меня есть аналогичная проблема, однако как я могу сделать то же самое в рамках Spock? Любой пример - ссылка будет очень полезна – Ectoras