繁体   English   中英

executeUpdate() 不更新 grails spock 集成测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM