Grails spock单元测试查询
Grails spock unit testing query
我正在使用 grails 2.3.7 ..在 Spock 单元测试中我正在模拟 findWhere 方法..
DocumentHeader.metaClass.static.findWhere = {DocumentType type, String workStation, Boolean complete ->
println "Running mock findWhere .. "
new DefaultDocument()
}
我用它来模拟服务中的方法调用..
def returnDocument = DocumentHeader.findWhere(documentType:DocumentType.DEFAULT_TYPE,
workStation: requirement.workstation,
complete: false)
参数类型正确,但调用测试时我得到
Cannot query [com.sample.DocumentHeader] on non-existent property: workStation org.springframework.dao.InvalidDataAccessResourceUsageException: Cannot query [com.vantec.DocumentHeader] on non-existent property: workStation
at org.grails.datastore.mapping.simple.query.SimpleMapQuery
所以它似乎在调用真正的方法 - 而不是模拟..任何人有什么想法吗?不记得之前模拟过 findWhere 查询所以任何人都知道任何问题吗? TIA ..
通过此代码,您正在模拟(或添加)方法
DocumentHeader findWhere(DocumentType dt, String w, Boolean c)
但是在你调用的服务中
DocumentHeader findWhere(Map props)
尝试将元类更改为:
DocumentHeader.metaClass.static.findWhere = {Map props ->
println "Running mock findWhere .. "
new DefaultDocument()
}
我正在使用 grails 2.3.7 ..在 Spock 单元测试中我正在模拟 findWhere 方法..
DocumentHeader.metaClass.static.findWhere = {DocumentType type, String workStation, Boolean complete ->
println "Running mock findWhere .. "
new DefaultDocument()
}
我用它来模拟服务中的方法调用..
def returnDocument = DocumentHeader.findWhere(documentType:DocumentType.DEFAULT_TYPE,
workStation: requirement.workstation,
complete: false)
参数类型正确,但调用测试时我得到
Cannot query [com.sample.DocumentHeader] on non-existent property: workStation org.springframework.dao.InvalidDataAccessResourceUsageException: Cannot query [com.vantec.DocumentHeader] on non-existent property: workStation
at org.grails.datastore.mapping.simple.query.SimpleMapQuery
所以它似乎在调用真正的方法 - 而不是模拟..任何人有什么想法吗?不记得之前模拟过 findWhere 查询所以任何人都知道任何问题吗? TIA ..
通过此代码,您正在模拟(或添加)方法
DocumentHeader findWhere(DocumentType dt, String w, Boolean c)
但是在你调用的服务中
DocumentHeader findWhere(Map props)
尝试将元类更改为:
DocumentHeader.metaClass.static.findWhere = {Map props ->
println "Running mock findWhere .. "
new DefaultDocument()
}