Grails集成测试不会回滚

Grails集成测试不会回滚,第1张

概述我正在学习书籍“ Grails In Action”中的grails,我正在尝试从示例中运行集成测试.在书中它说每个集成测试函数应该在每个测试结束时回滚它的 *** 作.它不会回滚每个事务(因为当我完成数据库时是脏的).我试图找出原因,发现找到了一个名为“transactional”的属性.据称你将此属性设置为true,它将使测试用例处于事务状态,但它似乎不会改变行为.我已经包含了下面单元测试的代码. 我 我正在学习书籍“ Grails In Action”中的grails,我正在尝试从示例中运行集成测试.在书中它说每个集成测试函数应该在每个测试结束时回滚它的 *** 作.它不会回滚每个事务(因为当我完成数据库时是脏的).我试图找出原因,发现找到了一个名为“transactional”的属性.据称你将此属性设置为true,它将使测试用例处于事务状态,但它似乎不会改变行为.我已经包含了下面单元测试的代码.

我正在使用grails 1.3.7并连接到MysqL数据库.测试成功运行,它不会回滚.我在这次集成测试中做错了什么,它会跳过回滚?

UserIntegrationTests.groovy:

package com.grailsinactionimport framework.TestToolsclass UserIntegrationTests extends GroovyTestCase {    static transactional = true    protected voID setUp() {        super.setUp()    }    protected voID tearDown() {        super.tearDown()    }    voID testcreateuser() {        TestTools.banner(log,"testcreateuser()")        def user = new User(userID:"joe",password:"secret")        assertNotNull user.save()        assertNotNull user.ID        def foundUser = User.get(user.ID)        assertEquals 'joe',foundUser.userID    }    voID testSaveAndUpdate() {        TestTools.banner(log,"testSaveAndUpdate()")        def user = new User(userID:"joe2",password:"secret")        assertNotNull user.save()        def foundUser = User.get(user.ID)        foundUser.password = 'sesame'        foundUser.save()        def editedUser = User.get(user.ID)        assertEquals 'sesame',editedUser.password    }    voID testSaveThenDelete() {        TestTools.banner(log,"testSaveThenDelete()")        def user = new User(userID: 'joe3',password: 'secret')        assertNotNull user.save()        def foundUser = User.get(user.ID)        foundUser.delete()        assertFalse User.exists(foundUser.ID)    }    voID testValIDation() {        TestTools.banner(log,"testValIDation()")        def user = new User(userID: 'chuck-norris',password: 'tiny')        assertFalse user.valIDate()        assertTrue user.hasErrors()        def errors = user.errors        assertNotNull errors        errors.allErrors.each {            log.info("fIEld: ${it.fIEld},code=${it.code},rejected=${it.rejectedValue}")        }    }}

User.groovy

package com.grailsinactionclass User {    String userID    String password    Date dateCreated    Profile profile    static constraints = {        userID(size: 3..20,unique: true)        password(size: 6..8,valIDator: {password,user ->            return (password != user.userID)        })        dateCreated()        profile(nullable: true)    }    static mapPing = {        profile lazy: false    }    static hasMany = [posts : Post]}

测试执行日志

Testing started at 8:28 PM ...Welcome to Grails 1.3.7 - http://grails.org/licensed under Apache Standard license 2.0Grails home is set to: C:\Users\jmquigley\workspace\apps\Grails\grails-1.3.7Base Directory: C:\Users\jmquigley\workspace\samples\lang-grails\hubbubResolving dependencIEs...DependencIEs resolved in 963ms.Running script C:\Users\jmquigley\workspace\apps\Grails\grails-1.3.7\scripts\TestApp.groovyEnvironment set to test  [groovyc] Compiling 1 source file to C:\Users\jmquigley\workspace\samples\lang-grails\hubbub\target\classes    [mkdir] Created dir: C:\Users\jmquigley\workspace\samples\lang-grails\hubbub\target\test-reports\HTML    [mkdir] Created dir: C:\Users\jmquigley\workspace\samples\lang-grails\hubbub\target\test-reports\plainStarting integration test phase ...  [groovyc] Compiling 1 source file to C:\Users\jmquigley\workspace\samples\lang-grails\hubbub\target\classes  [groovyc] Compiling 1 source file to C:\Users\jmquigley\workspace\samples\lang-grails\hubbub\target\classes[INFO ]20110417@20:28:42,959:grails.spring.BeanBuilder: [RuntimeConfiguration] Configuring data source for environment: TEST  [groovyc] Compiling 1 source file to C:\Users\jmquigley\workspace\samples\lang-grails\hubbub\target\test-classes\integration-------------------------------------------------------Running 4 integration tests...Running test com.grailsinaction.UserIntegrationTests...--Output from testcreateuser--[INFO ]20110417@20:28:46,897:groovy.util.GroovyTestCase: Test Case: testcreateuser()--Output from testSaveAndUpdate--[INFO ]20110417@20:28:47,534:groovy.util.GroovyTestCase: Test Case: testSaveAndUpdate()--Output from testSaveThenDelete--[INFO ]20110417@20:28:47,568:groovy.util.GroovyTestCase: Test Case: testSaveThenDelete()--Output from testValIDation--[INFO ]20110417@20:28:47,642:groovy.util.GroovyTestCase: Test Case: testValIDation()[INFO ]20110417@20:28:47,668:groovy.util.GroovyTestCase: fIEld: password,code=size.toosmall,rejected=tinynullPASSEDTests Completed in 1173ms ...-------------------------------------------------------Tests passed: 4Tests Failed: 0-------------------------------------------------------[junitreport] Processing C:\Users\jmquigley\workspace\samples\lang-grails\hubbub\target\test-reports\TESTS-TestSuites.xml to C:\Users\JMQUIG~1\AppData\Local\Temp\null90011239[junitreport] Loading stylesheet C:\Users\jmquigley\workspace\apps\Grails\grails-1.3.7\lib\junit-frames.xsl[junitreport] transform time: 415ms[junitreport] Deleting: C:\Users\JMQUIG~1\AppData\Local\Temp\null90011239Tests PASSED - vIEw reports in target\test-reportsApplication context shutting down...Application context shutdown.Process finished with exit code 0
解决方法 默认情况下,测试(和服务)是事务性的,因此通常只在指定静态事务属性时才指定它.如果你没有指定方言,它可能会自动检测MysqL,但是这些表是使用默认引擎创建的,可能是MyISAM. MyISAM表不是事务性的.每当使用MysqL时,请务必指定InnoDB方言,例如:

test {   dataSource {      dialect= org.hibernate.dialect.MysqLInnoDBDialect      driverClassname = 'com.MysqL.jdbc.Driver'      username = '...'      password = '...'      url = '...'      dbCreate = 'update'   }}

或者如果你在所有环境中使用MysqL,你可以将它移到顶层,例如

dataSource {   pooled = true   dialect = org.hibernate.dialect.MysqLInnoDBDialect   driverClassname = 'com.MysqL.jdbc.Driver'}
总结

以上是内存溢出为你收集整理的Grails集成测试不会回滚全部内容,希望文章能够帮你解决Grails集成测试不会回滚所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1083755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存