Hibernate grails IntegrationSpec:如何使其不回滚
我希望测试代码在测试完成后不回滚 我在mysql上插入了数据,但从未提交 我使用了@Rollback和许多没有成功的东西 测试代码如下所示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
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:非常感谢!这应该是公认的答案。