繁体   English   中英

使用Java模拟MySQL服务器

[英]Mocking a MySQL server with Java

由于我不是很熟悉数据库,一些细节可能不相关,但我会包括所有内容:

作为我大学项目的一部分,我们正在创建一个使用JSP,servlet并使用MySQL服务器作为后端的网站。

我负责在DB上设置表,并创建Java类以与之交互。 但是,我们只能从大学内部连接到MySQL服务器,而我们所有人(7人)主要在家工作。

我正在创建一个接口QueryHandler ,它有一个接受字符串(表示查询)并返回ResultSet 我的问题是:如何创建一个实现此接口的类,它将模拟数据库并允许其他人使用不同的DBHandler并且不知道差异并允许我在不连接到实际MySQL数据库的情况下测试不同的查询?

编辑 :我不太确定SQL数据库之间的差异,但显然我在MySQL上运行的所有查询都应该在mock上运行。

为什么不安装自己的MySQL数据库进行测试? 它可以在Windows,Mac和Linux上运行,并且资源不会太多。 我把它安装在笔记本电脑上进行本地测试。

您的API似乎存在缺陷。 您不应该将ResultSet返回给客户端。 通过这样做,您永远迫使您的客户依赖关系数据库后端。 您的数据访问层需要隐藏数据实际结构和存储方式的所有详细信息。

请考虑返回List或允许客户端提供数据访问组件可以写入的Stream,而不是返回ResultSet。

这将使单元测试对API的客户端变得微不足道,并允许您随意交换存储机制。

尝试德比 如果您不介意在返回SqlServer时更改驱动程序,那么它是一个可用于测试的免费服务器。 您可以运行的查询类型可能有限。 我不确定SqlServer是否在标准SQL之外有任何特殊语法。

如何使用HSQLDB进行离线测试? 它不会像MySQL数据库那样表现,但它是一个内存快速的SQL数据库,可以满足您的大部分需求。

根据我的经验,最好的方法是多个数据库实例和/或模式。 通常情况下,每个用户都有一个用于对正在运行的应用程序进行开发/健全检查的开发,一个用于运行单元测试的自动构建,一个用于每个用户运行单元测试。 当然还有用于演示,集成测试的实例/模式。 除了实际的一面,能够做到这一点确保部署/升级app /数据库也将非常接近完美。

假设您有一个DAO层,那么需要在单元测试级别访问真实数据库的唯一代码是DAO实现,业务层应该使用模拟DAO实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM