我正在使用Java收集数据并将这些数据存储在MySQL数据库中。另外,我使用Maven构建项目,TestNG作为测试框架,使用Spring-Jdbc访问数据库。我已经实现了一个封装对数据库的访问的DAO层。除了使用DAO类添加数据之外,我想执行一些查询,这些查询聚合数据并将结果存储在其他一些表中(如物化视图)。
现在,我想编写一些测试用例来检查DAO类是否正常工作。因此,我想到了一个内存数据库,它将填充一些测试数据。由于我也使用特定于MySQL的SQL查询来聚合数据,我遇到了一些麻烦:
现在,我有点陷入困境,我想知道我是否应该以不同的方式创建架构。有人提供了一些如何设置合适系统的提示吗?我还有其他两个选择:
我很感激任何提示。
谢谢, XComp
答案 0 :(得分:8)
我为此专门创建了Maven插件:jcabi-mysql-maven-plugin
。它在pre-integration-test
阶段启动本地MySQL服务器并在post-integration-test
上关闭它。
答案 1 :(得分:2)
如果无法让内存中的MySQL数据库工作,我建议使用H2数据库进行“简单”测试和一个专门的MySQL实例来测试特定于MySQL的查询。< / p>
此外,真实MySQL数据库的测试可以在单独的maven配置文件中配置为集成测试,这样它们就不会成为常规maven构建的一部分。在CI服务器上,您可以创建一个定期运行MySQL测试的其他作业,例如每天或每隔几个小时。通过这样的设置,您可以保留并测试特定于产品的查询,而常规构建不会变慢。即使测试数据库不可用,您也可以运行正常构建。
有一个很好的maven插件,用于集成测试maven-failsafe-plugin。它提供了集成前和集成后的测试步骤,可用于在测试之前设置测试数据并在测试后清理数据库。