gpt4 book ai didi

unit-testing - Grails 的 mockDomain() 方法有哪些限制?

转载 作者:行者123 更新时间:2023-12-01 13:03:25 24 4
gpt4 key购买 nike

我正在为 Grails 1.3.5 中的服务编写 Spock 规范(单元测试),我遇到了以下错误:

No signature of method: myapp.Thing.findAll() is applicable for argument types: (java.util.LinkedHashMap) values: [[sort:index, order:asc]] Possible solutions: findAll(), findAll(groovy.lang.Closure), find(groovy.lang.Closure), getAll(java.util.List), getAll([Ljava.lang.Object;)

groovy.lang.MissingMethodException: No signature of method: myapp.Thing.findAll() is applicable for argument types: (java.util.LinkedHashMap) values: [[sort:index, order:asc]]
Possible solutions: findAll(), findAll(groovy.lang.Closure), find(groovy.lang.Closure), getAll(java.util.List), getAll([Ljava.lang.Object;)
at grails.test.MockUtils.addDynamicFinders_closure56(MockUtils.groovy:641)
at myapp.MyService.getCards(MyService.groovy:8)
at myapp.MyServiceSpec.getCards returns empty map if no cards or statuses are available(MyServiceSpec.groovy:13)

之前这个测试通过了,但是当我修改我的服务以在 getThings() 方法中包含结果排序时失败了。

class MyService {
static transactional = true

static getThings() {
Thing.findAll(sort: 'index', order: 'asc')
}
}

这在应用程序运行时似乎仍然有效,所以我怀疑这是 mockDomain() 实现的限制。

class MyServiceSpec extends UnitSpec {
def 'mockDomain has some limits, i suspect'() {
given:
mockDomain(Thing)
def myService = new MyService()
when:
myService.getThings()
then:
true
}
}

所以我的问题是,它们在使用 mockDomain() 添加到域类的方法与在运行时使用真实域类的方法上有区别吗?如果有,它们是什么?

最佳答案

sortorder 是 Hibernate 标准参数,它们不能与 MockDomain() 一起使用 - 它不涉及 Hibernate。幸运的是。

您可以自己模拟 findAll() 签名,使用实例数组 - MockDomain() 的第二个参数,(EDIT) ,这会覆盖 ThingfindAll(Map) 签名:

List<Thing> thingInstances = []

void setUp() {
mockDomain(Thing, thingInstances)

Thing.metaClass.`static`.findAll = { Map m ->
def result = thingInstances.sort{ it."${m.order}" }
m.order == 'asc' ? result : result.reverse()
}
}

(编辑结束)

或者您可以对其进行集成测试,然后它会运行很长时间。我不推荐。

关于unit-testing - Grails 的 mockDomain() 方法有哪些限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4450836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com