executeUpdate查询不适用于grails spock测试

executeUpdate查询不适用于grails spock测试,grails,integration-testing,spock,Grails,Integration Testing,Spock,现在愿意做如下的集成测试,但问题是 MerchantTier.executeUpdate('update MerchantTier..........'), 此处更新不起作用 但是如果我用 def merchant = MerchantTier.get(params.id.toLong()) merchant.setValue(merchantTierVal) 它不是执行更新,而是工作 是否有任何带有executeUpdate查询的prolem def merchantTier def

现在愿意做如下的集成测试,但问题是

MerchantTier.executeUpdate('update MerchantTier..........'), 
此处更新不起作用

但是如果我用

def merchant = MerchantTier.get(params.id.toLong())

merchant.setValue(merchantTierVal)
它不是执行更新,而是工作

是否有任何带有executeUpdate查询的prolem

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()])
}

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

此外,您还应该再次获取对象,因为它是由executeUpdate在您的void“for给定merchantTierId update merchantTier”(then:statement)中更新的

then:"return data"
 merchantTier.value==params.tierVal
这里merchantTier仍然是一个旧对象,因此其值将不等于params.tierVal

在另一种情况下,显式使用setter设置属性,因此它通过了集成测试

 def merchant = MerchantTier.get(params.id.toLong())
 merchant.setValue(merchantTierVal)

希望这有帮助。谢谢

对不起,这个问题真的不清楚。如果您需要任何人帮助,请编辑问题并澄清问题。谢谢先生,请检查给定链接的问题此处问题已详细阐述并更清楚无需添加几乎相同内容的新问题-请编辑此问题。谢谢您Anshul先生,请检查给定链接的问题这里的问题是详细阐述和更清楚