我们刚刚遇到(并解决了)一个问题,这个问题只由PostgreSQL的JDBC驱动程序报告。内存中的H2数据库通过了测试,但是当我们在DataSource.groovy中更改测试数据库以匹配生产数据库时,测试失败了。
// this data source allows a bug discovered in production to be hidden,
// but can be run without additional setup
inMemoryTest {
dataSource {
dbCreate = "create-drop" //
我们的开发数据库(Oracle 9i)使用远程数据库链接到远程共享数据库。
这个决定是几年前做出的,当时把一些数据库模式放在开发机器上是不切实际的--它们太大了。
我们在开发机器上有某些模式,并且通过使用Oracle的数据库链接以及开发机器上的一些同义词,使远程模式看起来是本地的。
我遇到的问题是,我想测试一段SQL,它连接数据库链接两边的模式中的表。
例如(简化的案件):
select a.col, b.col
from a, b
where a.b_id = b.id
a位于本地数据库b在remove数据库中,我在locale DB上有一个同义词,因此“b”实际上指向b@
我的游戏应用程序使用postgres。它包括一些特定于postgres的演化,这使得我无法使用内存中的h2数据库进行测试。例如,以下演化在Postgres中很好,但在h2中失败(即使在MODE=PostgreSQL中也是如此):
alter table ac_host rename column base_url to baseurl;
h2的等效值是:
alter table ac_host alter column base_url rename to baseurl;
我想在我的一些测试中使用h2,但由于h2不兼容的演进,尝试在应用程序初始化时失败。是否有办法解决这一问题,例如,根据数据
经过在互联网上的大量阅读,我发现使用像H2这样的内存中DB来对DAO层进行单元测试似乎是一个很好的实践。背后的想法是避免与生产数据库一起工作。 很好,所以我设置了一个Postgres数据库并激活了H2 PostgreSQL兼容模式,因为我的生产数据库是在Postgres上的。我现在面临的问题是:当我为了构建测试数据库而在H2上运行原始的SQL查询时,这个查询不被H2接受为有效: ALTER SEQUENCE MYERP.ecriture_comptable_id_seq OWNED BY MYERP.ecriture_comptable.id; 我猜使用Postgres兼容模式并不能保证所有