gpt4 book ai didi

grails - executeUpdate查询不适用于Grails Spock测试

转载 作者:行者123 更新时间:2023-12-02 15:56:43 24 4
gpt4 key购买 nike

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

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

最佳答案

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

同样,您应该再次获取对象,因为它是通过exectUpdate在中更新的,而void为给定的mercerTierId更新vendorTier“()然后:

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

这里的商人仍然是一个旧对象,因此将不具有等于params.tierVal的值

在其他情况下,您正在显式使用setter设置属性,因此该属性通过了集成测试。
 def merchant = MerchantTier.get(params.id.toLong())
merchant.setValue(merchantTierVal)

希望这可以帮助。谢谢

关于grails - executeUpdate查询不适用于Grails Spock测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33411653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com