【发布时间】:2013-01-28 07:44:52
【问题描述】:
我有很多访问数据库的 DAO 测试。 我试图在 H2 等内存数据库中使用 Java 来模拟它们。 但问题是 ddl 脚本包含 H2 似乎不支持的分区语句。 我基本上想使用与生产中相同的 ddl 脚本,并且不想以任何方式为我的“单元”测试修改它们。 我也尝试过 HSQL,但发现 H2 更类似于 oracle,但即便如此它也不支持分区。 有解决办法吗?
我确实看过以下内容 Create an in-memory database structure from an Oracle instance 它谈到了使用 H2,但我已经提到了它的缺点。 寻找一些替代品。
【问题讨论】:
-
如果您想要进行有意义的测试,您不能模拟 Oracle 数据库(或任何 DBMS)。设置运行测试的测试实例。顺便说一句:如果您实际上是在谈论 partitioning 或 window functions(使用
over(partition by ..),您应该提及 -
+1 @a_horse_with_no_name 的评论。每个数据库的语法略有不同,最好设置一个 oracle 的测试实例
-
@MiserableVariable 这取决于 DAO 的复杂性以及您要测试的内容。如果 DAO 只做简单的 CRUD 操作,那么 H2 对于 unit 测试来说已经足够了。但我同意也应该在 Oracle 上运行测试(即集成测试)。
-
正确,如果您的程序使用的 SQL 功能以相同的方式被 H2 和 Oracle 支持,即没有任何细微差别,则通常可以使用 H2。如果您使用的是 OR 映射库/框架,它也可能没问题。但在实践中,我发现有必要在生产中使用实际的数据库服务器