我正在使用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集成测试不会回滚所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)