7

我正在将应用程序从 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 交互样式,所以我想出了这个解决方案:

  • 用新的 MockFor() 替换 mockFor()
  • 用 proxyInstance() 替换 createMock()
  • 将对 fooBean.fooService = fooService.proxyInstance() 的调用移至需求之后

没有进一步的更改,这在 Grails 3 中“正常工作”。

4

2 回答 2

10

您可以默认使用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;
    }
}
于 2015-11-24T23:23:40.343 回答
6

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

  1. 为 groovy 的 MockFor 添加导入: import groovy.mock.interceptor.MockFor
  2. 重命名mockFornew MockFor
  3. 重命名createMock()proxyInstance()
  4. 删除调用verify()
于 2016-11-18T15:42:35.803 回答