首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Grails集成测试中清除easyb场景之间的数据库(域)?

如何在Grails集成测试中清除easyb场景之间的数据库(域)?
EN

Stack Overflow用户
提问于 2010-08-19 07:05:54
回答 2查看 322关注 0票数 2

我正在运行一个Grails应用程序的集成测试。我使用的是easyb插件。问题是,数据库似乎没有在两个场景之间被清除。我的意思是,当我运行标准的Grails集成测试时,每个测试之间的持久性上下文都会被清除。easyb的故事在Integration文件夹中,但是Grails集成测试规则似乎不适用于这里……那么,如何让easyb自我清理呢?

附注:我在同一个groovy文件fwiw中定义了多个场景,但我不认为这是必要的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-15 06:45:35

以防像我这样的人还在处理这个问题,并在每个测试场景之后寻找回滚的方法,下面是一个有效的解决方案(感谢Burt Beckwith的博客)。

将每个easyb测试场景包装在一个with transaction块中,并在最后手动回滚

代码语言:javascript
复制
scenario "add person should be successful", {
Person.withTransaction { status -> 
    given "no people in database", {
    }
    when "I add a person", {
        Person.build()
    }
    then "the number of people in database is one", {
        Person.list().size().shouldEqual 1
    }
    status.setRollbackOnly()
}
}

scenario "database rollback should be successful", {
given "the previous test created a person", {
}
when "queried for people", {
    people = Person.list().size()
}
then "the number of people should be zero", {
    people.shouldEqual 0
}
}

以上测试通过。如果你对这个问题有更好的解决方案,请发帖

票数 0
EN

Stack Overflow用户

发布于 2010-08-20 03:22:12

一种可能性是使用事务。我在java中使用了这种技术。您可以使用事务注释标记您的测试。在测试之后,您将回滚数据库更改。

下一种可能是在after scenario部分运行SQL cleanup查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3517445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档