gpt4 book ai didi

unit-testing - Grails单元测试服务-如何冲洗?

转载 作者:行者123 更新时间:2023-12-02 13:51:35 24 4
gpt4 key购买 nike

我将Grails V2.4.3与HibernateTestMixin一起使用。我对服务有一个简单的单元测试,如下所示:

import spock.lang.*
import grails.test.mixin.TestMixin
import grails.test.mixin.gorm.Domain
import grails.test.mixin.hibernate.HibernateTestMixin
import grails.buildtestdata.mixin.Build

@TestFor(FieldSavingService)
@Domain([Field, SubField])
@TestMixin(HibernateTestMixin)
class FieldSavingServiceSpec extends Specification {

void "Should save Field"() {
given:
Field field = new Field(label: "Name").save(flush: true)
def first = new SubField(caption: "first", sortOrder: 0, field: field).save(flush: true)
def second = new SubField(caption: "second", sortOrder: 1, field: field).save(flush: true)
field.addToSubFields(second).addToSubFields(first).save(flush: true, failOnError: true)

when:
service.deleteField()

then:
SubField.findAllByField(field).size() == 0 //test fails
}
}

该服务如下:
class FieldSavingService {
void deleteField() {
Field field = Field.findByLabel("Name")
def subFields = SubField.findAllByField(field)
subFields.each{ it.delete()}
field.delete() //unit test passes if field.delete(flush: true) is called
}
}

仅当我在服务中调用带有flush:true的delete时,单元测试才会通过。鉴于Grails中的服务是事务性的(即,当域从服务返回时应刷新域),如何在不调用生产代码中刷新的情况下通过测试?谢谢 :)

最佳答案

您可以尝试在删除后显式刷新当前 session 。请注意,您可以使用hibernateSession(source code)提供的HibernateTestMixin属性访问当前 session 。

void "Should save Field"() {
given:
Field field = new Field(label: "Name").save(flush: true)
def first = new SubField(caption: "first", sortOrder: 0, field: field).save(flush: true)
def second = new SubField(caption: "second", sortOrder: 1, field: field).save(flush: true)
field.addToSubFields(second).addToSubFields(first).save(flush: true, failOnError: true)

when:
service.deleteField()
hibernateSession.flush() // explicitly flush current session

then:
SubField.findAllByField(field).size() == 0 //test fails
}

关于unit-testing - Grails单元测试服务-如何冲洗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25719071/

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