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

时间:2015-11-24 22:54:03

标签: 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 ->
}

但看起来像'mockFor'简直就是从文档中消失了。 Grails 3的方法是什么?

更新:

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

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

没有进一步的改变,这"只是工作"在Grails 3中。

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:5)

我还在使用mockFor的grails 2升级了大量测试,并使用了HypeMK概述的类似方法:

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