我正在使用Grails 2.4,我有一个帮助服务,它创建一个特定的域类,设置它周围的依赖关系,然后最终将对象保存到数据库中,在一个promise中。
我该如何测试这项服务?
该服务的一个例子是:
def persist(name, objectId, depTwoId) {
Person p = Person.findByName(name)
Object o = Object.findById(objectId)
RepObject rob = RepObject(p, o) //Ok you get the idea here
def task = Promises.task {
rob.save()
}
}
我不关心,在单元测试的上下文中,是否有保存到数据库。我只是想知道它被称为。
答案 0 :(得分:1)
你必须做一些事情来等待异步调用完成,但这是一个单独的问题。
如果您要验证的是调用了save,而不是该对象实际上是持久的,那么我将使用元类执行此操作:
在集成测试中调用persist
方法之前,请添加:
boolean saveCalled = false
RepObject.metaClass.save = { -> saveCalled = true }
并在您的Spock then
区块中或在您执行验证呼叫的任何位置添加
assert saveCalled
请注意,元类save
闭包的签名必须与实际调用的匹配。你显示它被调用没有args,但如果你调用save(flush:true)
然后你传递一个Map arg并且签名必须是
RepObject.metaClass.save = { Map m -> saveCalled = true }
否则Groovy不会选择你的,它会调用真正的方法。