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 交互风格,所以我想出了这个解决方案:
- 用新的 MockFor() 替换 mockFor()
- 将 createMock() 替换为 proxyInstance()
- 将对 fooBean.fooService = fooService.proxyInstance() 的调用移动到 在 需求
之后
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 概述的类似方法:
- 为 groovy 的 MockFor 添加导入:
import groovy.mock.interceptor.MockFor
- 将
mockFor
重命名为 new MockFor
- 将
createMock()
重命名为 proxyInstance()
- 删除对
verify()
的调用
我正在将一个应用程序从 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()
- 将 createMock() 替换为 proxyInstance()
- 将对 fooBean.fooService = fooService.proxyInstance() 的调用移动到 在 需求 之后
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 概述的类似方法:
- 为 groovy 的 MockFor 添加导入:
import groovy.mock.interceptor.MockFor
- 将
mockFor
重命名为new MockFor
- 将
createMock()
重命名为proxyInstance()
- 删除对
verify()
的调用