Hibernate grails IntegrationSpec:如何使其不回滚

Hibernate grails IntegrationSpec:如何使其不回滚,hibernate,grails,gorm,integration-testing,spock,Hibernate,Grails,Gorm,Integration Testing,Spock,我希望测试代码在测试完成后不回滚 我在mysql上插入了数据,但从未提交 我使用了@Rollback和许多没有成功的东西 测试代码如下所示 import grails.test.spock.IntegrationSpec import grails.transaction.Rollback; import org.hibernate.SessionFactory import spock.lang.* import com.ms.domain.WordInSentence class Comp

我希望测试代码在测试完成后不回滚

我在mysql上插入了数据,但从未提交

我使用了@Rollback和许多没有成功的东西

测试代码如下所示

import grails.test.spock.IntegrationSpec
import grails.transaction.Rollback;
import org.hibernate.SessionFactory
import spock.lang.*
import com.ms.domain.WordInSentence

class CompanyServiceSpec extends IntegrationSpec {

    CompanyService companyService;

    void "count login to private area"() {
        setup:''
        when:''
        then:''
//          def transaction = sessionFactory.currentSession.beginTransaction()
            companyService.scoreCompany();
//          transaction.commit()
    }
}
服务类

@Transactional
class CompanyService {

    def dataSource;

    void scoreCompany() {
        WordInSentence wis = new WordInSentence()
        wis.word = "a"
        wis.location = 1;
        wis.sentence_id = 1
        wis.save(flush:true);
        wis.save();
    }
}
引自

默认情况下,集成测试在数据库事务内部运行,这 在每个测试结束时回滚。这意味着数据已保存 在测试期间,数据不会持久化到数据库。添加一个事务 属性,以检查事务行为:

class MyServiceTests extends GroovyTestCase {
    static transactional = false
    void testMyTransactionalServiceMethod() {
        …
    }
}
因此,这应该能回答你的问题

...
class CompanyServiceSpec extends IntegrationSpec {

static transactional = false
...

.

默认情况下,集成测试是事务性的。您可以在类级别的规范中设置
static transactional=false
,以偏离该行为。但是,如果您不想污染每个测试用例,就必须格外小心在测试之间清除数据。@dmahapatro:非常感谢!这应该是公认的答案。