我正在收集数据并使用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