当使用MongoDB作为数据源时,我如何(应该)配置Grails集成测试以自动回滚事务? (我使用的是Grails 2.2.1 + mongodb插件1.2.0)
答案 0 :(得分:2)
对于spock集成测试,我定义了一个MongoIntegrationSpec,它可以控制清理测试数据。
这是来源
该项目也有几个用法示例。
答案 1 :(得分:1)
我认为它甚至不可能,因为MongoDB不支持事务。您可以使用建议的static transactional = 'mongo'
,但只有在您没有刷新数据时才有用(我认为这种情况很少见)
相反,您可以手动清除setUp()
上的数据库。您可以删除要测试的域的集合,例如:
MyDomain.collection.drop()
和(可选地)填写测试所需的所有数据。
答案 2 :(得分:0)
可以在static transactional = 'mongo'
测试和/或integration
课程中使用service
。
有关详细信息,请参阅MongoDB Plugin。
答案 3 :(得分:0)
MongoDB不支持交易!因此你不能使用它。你有的选择是
MyDomain.collection.drop() //If you use mongoDB plugin alone without hibernate
MyDomain.mongo.collection.drop() //If you use mongoDB plugin with hibernate
退回是您必须为您使用的每个域执行此操作
String host = grailsApplication.config.grails.mongo.host
Integer port = grailsApplication.config.grails.mongo.port
Integer databaseName = grailsApplication.config.grails.mongo.databaseName
def mongo = new GMongo(host, port)
mongo.getDB(databaseName).dropDatabase() //this takes 0.3-0.5 seconds in my machin
第二种选择更容易,更快捷。为了使这项工作适用于所有测试,请扩展IntegrationSpec
并添加代码以删除清理块中的数据库(我假设您正在使用Spock测试框架)或者为JUnit执行类似测试的操作!
希望这有帮助!