2013-05-21 88 views
2

我目前正在开发一个Grails项目,该项目有一个静态生产数据库,其中包含大量数据。我想使用生产数据来测试我的应用程序,但我不想克隆生产数据库,而是想要将生成数据库的代理数据库。如何使用测试数据库代理生产数据库?

基本上读取数据库将一直到生产数据库,而写入将停止在代理数据库(最好是一个h2数据库)。如果行更新来自生产数据库,则该行将保存到代理数据库,并在后续查询中返回而不是生产行。

我想尽可能透明地完成所有这些工作。我目前的想法是,我需要分叉Hibernate的GORM实现,并支持这个用例。这是否做过?有没有更好的办法?

回答

1

分叉休眠GORM实现可能不是一个好主意。你将被困在你的版本中,并且不得不以某种方式使它与原来的插件保持同步(例如错误修复,新的实现)。

也许定制TestMixin,使您可以覆盖all registered domain classes,与save()get()find()和等新的实现可以是一种选择。您可以使用metaClass来覆盖此静态方法,并且只有在带有注释的mixin的测试中才会触发该方法。

有了这个,您可以在测试环境中使用多个数据源来确定将使用哪个数据源。

+0

这是一个不错的主意,但它限制了我的使用仅限于自动化测试。我真的很喜欢这与run-app一起工作。 –

+0

你的意思是你想为开发和集成的envs这种行为? –

+0

第一个目标实际上是在开发环境中实现这个目标(至少那是我的头)。由于数据库可能未处于已知状态,集成环境呈现出它自己的一系列挑战。 –

相关问题