executeUpdate()在grails spock-integration测试中没有更新。

问题描述 投票:-1回答:2

嗨,我是新来的grails测试。愿意做如下的集成测试,但是问题是 executeUpdate() 似乎没有更新值

如何进行集成测试 executeUpdate('update query goes here') ??

请帮助建议我 样本代码是给出的问题演示.Thanks in advance.

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') ??

grails groovy integration-testing spock
2个回答
0
投票

当你通过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:子句中得到包含商户层对象的testData。

于是

 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

请你试一试这种方式。试试吧

© www.soinside.com 2019 - 2024. All rights reserved.