Zek*_*eks 19 c++ qt unit-testing gmock
我刚刚发现了gmock,现在正在"重新思考整个编程过程",尽可能地添加单元测试.令我感到奇怪的一点是,QSql模块明显是我们代码的外部依赖,并没有给开发人员提供模拟其内部的工具.我能用这个模块想到的最好的东西是内存数据库,它比简单的模拟更难实现,甚至不可能(考虑使用内存数据库伪装oracle包)
现在,对我来说,这不是一个问题,不久之前我们已经切换到继承自虚拟接口的本地增长的ocilib包装器(因此,很容易模拟).但是真的,当你使用Qt自己的QSql模块时,有没有办法模拟?或者更确切地说 - Qt是一个(非常好的)框架,他们真的没有为这些用例提供自动化,或者我错过了什么?
UPD1:关于问题重要性的小更新:
我的代码非常与Oracle SQL查询交错,因为对于某些其他人的代码而言.当外部依赖(也是大量开发)有时会提供不正确的数据时,单元测试这样的代码实际上是不可能的.当您的单元测试中断时,您希望它是您的代码,而不是Oracle.这就是我问原问题的原因.如果存在/存在一种使用qsqlquery接口半容易地模拟依赖关系的方法,则可以使用QSql编写代码的单元测试.
UPD2:虽然经过进一步考虑后,我不得不承认,通过更好的代码设计(OO而不是某些地方的免费功能)和更好的实体分离可以避免这个问题.因此,在UPD1中几乎不可能是不合理的.虽然这并没有真正使原始问题变得不那么重要.例如,当你负责维护遗留代码时,模拟QtSql是将测试引入系统的唯一现实方法.
如果您只想使用内存中的 SQL 数据库作为 QtSQL 的模拟后端,您可以考虑使用SQLite。
SQLite 是一个进程内库,它实现了独立、无服务器、零配置、事务性 SQL 数据库引擎。SQLite 的代码属于公共领域,因此可以免费用于任何目的,无论是商业目的还是私人目的。SQLite 是世界上部署最广泛的数据库,其应用程序数量多得数不胜数,其中包括几个备受瞩目的项目。
在 QtSQL 调用后面使用真正的 SQL 解释器的优点是,您可以验证传入的 SQL 语法,以及查询是否实际返回预期结果。
如果您关心的是测试执行 Oracle SQL 特定功能的 SQL 查询,那么如果不针对真正的 Oracle SQL 服务器进行测试,就没有其他方法可以知道您是否正确使用了这些功能。