grails IntegrationSpec:如何使其不回滚

时间:2014-12-30 12:33:52

标签: 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 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();
    }
}

1 个答案:

答案 0 :(得分:2)

引自Grails Documentation

  

默认情况下,集成测试在数据库事务中运行   在每次测试结束时回滚。这意味着保存了数据   在测试期间没有持久化到数据库。添加交易   测试类的属性以检查事务行为:

class MyServiceTests extends GroovyTestCase {
    static transactional = false
    void testMyTransactionalServiceMethod() {
        …
    }
}

因此,这应该回答你的问题

...
class CompanyServiceSpec extends IntegrationSpec {

static transactional = false
...