[英]executeUpdate() not updating on grails spock-integration testing
嗨,我是 grails 测试的新手。 愿意进行如下集成测试,但问题是executeUpdate()
似乎没有更新值
如何对executeUpdate('update query goes here')
进行集成测试??
请帮助建议我提供了问题演示的示例代码。 提前致谢。
def "for given merchantTier Id update merchantTier value"(){
setup:
def merchantTier = new MerchantTier(
value:1.11).save(flush: true) //it saves merchantTier
when:"when update with setProperty"
testData = editWithSetProperty(merchantTier.id) //id is passed
then:"it updates data and test is success"
merchantTier.value == 2.22
when:"executeUpdate query is used instead"
testData = editWithExecuteUpdate(merchantTier.id)// id is passed
then:"it does not update the data and test is failed"
merchantTier.value == 3.33
}
def editWithSetProperty(id) {
def merchantTier = MerchantTier.get(id.toLong())
merchantTier.setValue(2.22.toDouble())
}
def editWithExecuteUpdate(id) {
MerchantTier.executeUpdate('update MerchantTier mt set mt.value=:mrValue where mt.id=:mtId', [mrValue: 3.33.toDouble(), mtId: id.toLong()])
}
如何对executeUpdate('update query goes here')
进行集成测试??
当您通过 executeUpdate 进行更新时,您再次需要从数据库中获取对象,因此请尝试在 editWithExecuteUpdate 中返回从数据库中获取的新对象
def editWithExecuteUpdate(id) {
MerchantTier.executeUpdate('update MerchantTier mt set mt.value=:mrValue where mt.id=:mtId', [mrValue: 3.33.toDouble(), mtId: id.toLong()])
merchantTier = MerchantTier.get(id)
}
完成后,您将在 when: 子句中拥有包含 MerchantTier 对象的 testData
所以在 then: 子句有
testData.value == 3.33
希望这是有道理的。 谢谢
编辑 - 附加方式
def editWithExecuteUpdate(id) {
def updatedRecords = MerchantTier.executeUpdate('update MerchantTier mt set mt.value=:mrValue where mt.id=:mtId', [mrValue: 3.33.toDouble(), mtId: id.toLong()])
return updatedRecords
}
所以在 then: 子句中,由于 executeUpdate 只应根据唯一 ID 更新一行,并再次获取新对象并检查持久值
testData == 1
def freshMerchantTier = MerchantTier.get(merchantTier.id)
freshMerchantTier.value == 3.33
请尝试这种方式一次。 谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.