2015-11-24 3 views
4

Я обновляю приложение от Grails 2.4.4 до Grails 3.0.9, и я не могу найти никакой информации о том, как делать mockFor, createMock и требования в Grails 3.Grails 3 Unit Testing: Как вы делаете mockFor, createMock и требования в Grails 3?

Я делал вещи например:

fooService = mockFor(FooService) 
controller.fooService = fooService.createMock() 

fooService.demand.barMethod() { a,b -> 
} 

Но похоже, что «mockFor» просто ушел, даже из документации. Каков метод Grails 3 для этого?

UPDATE:

Я не хочу, чтобы переписать тысячи тестов, написанных стилем по Grails «mockFor» в стиле Спока взаимодействий, поэтому я пришел к этому решению:

  • заменить mockFor() с новым MockFor()
  • заменить createMock() с proxyInstance()
  • двигаться вызовы fooBean.fooService = fooService.proxyInstance() до после требования

При отсутствии дальнейших изменений, это «просто работает» в Grails 3.

+0

Ответ будет зависеть от того, тестирование рамки вы используете, который не указан в Вашем вопрос. Вы используете Spock? JUnit? Что-то другое? –

+0

Я использовал шаблон спроса mockFor + createMock + от Grails 1.3.7 (стиль GrailsUnitTestCase JUnit) до Grails 2.4.4 (Specification Spock style). – HypeMK

ответ

8

Вы можете использовать Spock по умолчанию:

@TestFor(MyController) 
class MyControllerSpec extends Specification { 

    void "test if mocking works"() { 
     given: 
     def fooService = Mock(FooService) 
     fooService.barMethod(_, _) >> {a, b -> 
      return a - b 
     } 

     when: 
     def result = fooService.barMethod(5, 4) 

     then: 
     result == 1 
    } 
} 

class FooService { 
    int barMethod(int a, int b) { 
     return a + b; 
    } 
} 
+0

Этого было достаточно для меня, чтобы понять, спасибо. – HypeMK

+0

Ознакомьтесь с решением Groovy, которое я придумал (обновлено в исходном посте). – HypeMK

+0

Спасибо за подсказку, это может пригодиться :) – jeremija

4

Я также обновляемой много тестов с grails 2, который использовал mockFor, и использовал аналогичный подход, который обозначил HypeMK:

  1. добавить импорт для groo VY в MockFor: import groovy.mock.interceptor.MockFor
  2. переименовывать mockFor в new MockFor
  3. переименовывать createMock() в proxyInstance()
  4. удалить вызовы verify()
+0

Отвечать отлично работает для тестов Junit в Grails 3.2.4 –