Grails 3单元测试:你如何在Grails 3中进行mockFor,createMock和require?

Hyp*_*eMK 6 grails grails-3.0 grails-3.0.9

我正在将应用程序从Grails 2.4.4升级到Grails 3.0.9,我找不到有关如何在Grails 3中执行mockFor,createMock和require的任何信息.

我以前做过这样的事情:

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

fooService.demand.barMethod() { a,b ->
}
Run Code Online (Sandbox Code Playgroud)

但看起来'mockFor'就像文件一样消失了.什么是Grails 3的方法呢?

更新:

我不想用Grails的mockFor'样式重写数千个用Spock交互方式编写的测试,所以我提出了这个解决方案:

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

没有进一步的改变,这在Grails 3中"正常".

jer*_*ija 9

您可以默认使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Jay*_* P. 5

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

  1. 为groovy的MockFor添加导入: import groovy.mock.interceptor.MockFor
  2. 重命名mockFornew MockFor
  3. 重命名createMock()proxyInstance()
  4. 删除电话 verify()