Grails Integration Testing中一个不显眼的特性

Grails是鼓吹先做测试的,而其Integration Testing是最简单直接的测试,连壳都造好了,就等着填测试代码了。
不过Grails还不只是造了一个壳,还做了一些动作,在它的文档里面就有半句话描述了它还做了什么:“and clear out all the data from the database in between each test”。实在是太不起眼了,不过用起来又是何其的畅快啊。

在一个偶然的机会下,跑test case时调试进去了(完全是新手的行为),到断点之前插了一条数据,指明要flush,然后测试插入重复数据。这时,我想应该在数据库里面可以看到那条数据的,结果是什么都看不到的。甚至到验证都通过了,最后是没有把插进去的数据清空的。理所当然的以为应该可以看到那条数据的,结果还是没有。

在各路高手的讨论和指导之下,终于知道grails干了些什么了。
文档里面那么隐晦的半句话,其实没那么简单哦。首先它为每个有数据库操作的case建立transaction,在跑的时候,其数据库操作都没有真正 commit,case结束后,transaction roll back。如果跑的时候断点调试,数据库的隔离级别设成Read Uncommitted,这时是可以看到插进去的那条数据的。当然这是按表像猜测的行为实现。
而且在case抛异常时这个机制还是有效的。

这个不显眼的特性太好了,不用过于担心数据残留的问题。最重要是:省事。
不明白为什么文档不写清楚点?也许这是故意的……

--
Copy from [url=http://leegorous.net/blog/article.asp?ArticleID=165]my base[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值