Grails 3 单元测试:如何在 Grails 3 中进行 mockFor、createMock 和需求?

Grails 3 Unit Testing: How do you do mockFor, createMock, and demands in Grails 3?

我正在将一个应用程序从 Grails 2.4.4 升级到 Grails 3.0.9,但我找不到任何关于如何在 Grails 3 中执行 mockFor、createMock 和需求的信息。

我曾经这样做过:

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

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

但看起来 'mockFor' 根本就没有了,甚至在文档中也是如此。 Grails 3 的方法是什么?

更新:

我不想将使用 Grails 'mockFor' 风格编写的数千个测试重写为 Spock 交互风格,所以我想出了这个解决方案:

Grails 3 中的 "just works" 无需进一步更改。

您可以默认使用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;
    }
}

我还从使用 mockFor 的 grails 2 升级了很多测试,并使用了 HypeMK 概述的类似方法:

  1. 为 groovy 的 MockFor 添加导入: import groovy.mock.interceptor.MockFor
  2. mockFor 重命名为 new MockFor
  3. createMock() 重命名为 proxyInstance()
  4. 删除对 verify()
  5. 的调用