gpt4 book ai didi

Grails spock 数据库锁定

转载 作者:行者123 更新时间:2023-12-02 14:19:39 24 4
gpt4 key购买 nike

我有一个锁定数据库行的服务方法。

public String getNextPath() {
PathSeed.withTransaction { txn ->
def seed = PathSeed.lock(1)
def seedValue = seed.seed
seed.seed++
seed.save()
}

}

这是我的 spock 测试的样子:

void "getNextPath should return a String"() {
when:
def path = pathGeneratorService.getNextPath()

then:
path instanceof String
}

这只是一个简单的初始测试。但是,当我运行测试时出现此错误:

java.lang.UnsupportedOperationException: Datastore [org.grails.datastore.mapping.simple.SimpleMapSession] does not support locking.
at org.grails.datastore.mapping.core.AbstractSession.lock(AbstractSession.java:603)
at org.grails.datastore.gorm.GormStaticApi.lock_closure14(GormStaticApi.groovy:343)
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:302)
at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:37)
at org.grails.datastore.gorm.GormStaticApi.lock(GormStaticApi.groovy:342)
at com.synacy.PathGeneratorService.getNextPath_closure1(PathGeneratorService.groovy:10)
at org.grails.datastore.gorm.GormStaticApi.withTransaction(GormStaticApi.groovy:712)
at com.synacy.PathGeneratorService$$EOapl2Cm.getNextPath(PathGeneratorService.groovy:9)
at com.synacy.PathGeneratorServiceSpec.getNextPath should return a String(PathGeneratorServiceSpec.groovy:17)

有人知道这是什么吗?

最佳答案

用于单元测试的简单 GORM 实现不支持某些功能,例如锁定。将您的测试移动到集成测试将使用 GORM 的完整实现,而不是单元测试使用的简单实现。

通常,当您发现自己使用的不仅仅是 GORM 的基本功能时,您将需要使用集成测试。

2014 年 10 月 6 日更新

在 Grails 和 GORM 的最新版本中,现在有 HibernateTestMixin,它允许您在单元测试中测试/使用此类功能。可以在 documentation 中找到更多信息。 .

关于Grails spock 数据库锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22933745/

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