executeUpdate查询无法处理grails spock测试

时间:2015-10-29 10:25:18

标签: grails integration-testing spock

现在愿意进行如下集成测试,但问题是

MerchantTier.executeUpdate('update MerchantTier..........'), 

此处更新无效

但如果我使用

进行更新
def merchant = MerchantTier.get(params.id.toLong())

merchant.setValue(merchantTierVal)

而不是执行更新它

是否存在执行executeUpdate查询的问题?

def merchantTier

def setup() {

merchantTier = new MerchantTier(
     startTier: tier,
     endTier: tier,
     value: 2.02).save(flush: true)
}


void "for given merchantTierId update merchantTier"(){

     setup:
     params = [id:merchantTier.id,tierVal:2]

     when:
     testData = updateIndividualSuperResellerTier(params)

     then:"return data"
     merchantTier.value==params.tierVal
}

def updateIndividualSuperResellerTier(params) {

     def merchantTierVal = 0
     if (params.tierVal) {
         merchantTierVal = params.tierVal.toDouble()
     }
     def merchantTier = MerchantTier.get(params.id.toLong())
     def updateMerchantTier = MerchantTier.executeUpdate('update MerchantTier mt set mt.value=:mrValue where mt.id=:mtId', [mrValue: merchantTierVal, mtId: params.id.toLong()])
}

1 个答案:

答案 0 :(得分:0)

executeUpdate似乎没有问题,这里的问题可能是,executeUpdate没有返回一个对象,它只返回更新的行数,因此 updateMerchantTier不包含updatedObject

此外,您应该再次获取对象,因为对于给定的merchantTierId update merchantTier,您的 void“中的executeUpdate会更新该对象”()然后:声明

then:"return data"
 merchantTier.value==params.tierVal

这里的商家物品仍然是旧物品,因此价值不等于params.tierVal

在你的另一种情况下,你明确地使用setter来设置属性,因此它通过了你的Integration测试。

 def merchant = MerchantTier.get(params.id.toLong())
 merchant.setValue(merchantTierVal)
希望这会有所帮助。感谢