我正在收集数据并将这些数据存储在使用 Java 的 MySQL 数据库中。此外,我使用 Maven 构建项目,使用 TestNG 作为测试框架,使用 Spring-Jdbc 访问数据库。我已经实现了一个 DAO 层,它封装了对数据库的访问。除了使用 DAO 类添加数据之外,我还想执行一些查询来聚合数据并将结果存储在其他一些表中(如物化视图)。
现在,我想编写一些测试用例来检查 DAO 类是否正常工作。因此,我想使用一个内存数据库,该数据库将填充一些测试数据。由于我还使用 MySQL 特定的 SQL 查询来聚合数据,因此遇到了一些麻烦:
- 首先,我想过简单地使用 Spring-Jdbc 提供的嵌入式数据库功能来实例化嵌入式数据库。我决定使用 H2 实现。由于聚合查询使用 MySQL 特定的内容(例如 DATE() 等时间操作函数),我遇到了麻烦。这种方法的另一个缺点是我需要维护两个 ddl 文件——在 MySQL 中定义表的实际 ddl 文件(这里我定义编码并为表和列添加注释,这两个功能都是 MySQL 特定的);以及定义相同表但没有注释等的测试 ddl 文件,因为 H2 不支持注释。
- 我找到了使用 MySQL 作为嵌入式数据库的描述,我可以在测试用例中使用它 (http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing.html) . 这对我来说听起来很有希望。不幸的是,它没有用:发生 MissingResourceExcpetion “找不到资源 '5-0-21/Linux-amd64/mysqld'”。似乎驱动程序无法在我的本地计算机上找到数据库守护程序。但我不知道我必须寻找什么才能找到该问题的解决方案。
现在,我有点卡住了,我想知道我是否应该以不同的方式创建架构。有人对我应该如何设置适当的系统有一些提示吗?我有另外两个选择:
- 我将不使用嵌入式数据库,而是使用本机 MySQL 实例并设置一个仅用于测试用例的数据库。这个选项听起来很慢。实际上,我可能想稍后设置一个 CI 服务器,我认为使用嵌入式数据库会更合适,因为测试运行得更快。
- 我从 SQL 查询中删除了所有 MySQL 特定的东西,并使用 H2 作为嵌入式数据库进行测试。如果这个选项是正确的选择,我需要找到另一种方法来测试将数据聚合到物化视图中的 SQL 查询。
- 还是有我没有想到的第三种选择?
我会很感激任何提示。
谢谢, XComp