c++ 有没有办法模拟QSqlQuery?

我刚刚发现了gmock,现在正在“重新思考整个编程过程”,在任何地方添加单元测试。
有一件事让我感到奇怪的是,在这个过程中,QSql模块显然是对我们代码的外部依赖,并没有给开发人员的工具来模拟它的内部。我可以想到的这个模块的最好的事情是内存数据库,它比一个简单的模拟器更难实现,甚至不总是可能的(考虑使用内存数据库的伪造的oracle软件包)

现在,对我而言,这并不完全是一个问题,前一段时间,我们已经转向了从虚拟接口继承的家庭成长的ocilib包装(并且因此容易嘲笑)。但是真的,当您使用Qt自己的QSql模块时,是否没有办法模拟?或者说 – Qt是一个(非常好的)框架,他们真的没有为这种用例提供​​自动化,还是我缺少一些东西?

UPD1:
关于这个问题的重要性的一个小的更新:

我的代码与Oracle SQL查询非常重叠,因为某些其他人的代码。当外部依赖关系也很大程度上在开发中时,单元测试这种代码实际上是不可能的,有时会提供不正确的数据。当您的单元测试中断时,您希望它成为您的错误代码,而不是Oracle。这就是为什么我问原来的问题。如果存在/存在一种使用qsqlquery接口来轻松模拟依赖关系的方法,那么使用QSql编写单元测试代码成为可能。

UPD2:虽然经过进一步的考虑,我不得不承认,通过更好的代码设计(OO而不是某些地方的自由功能)和更好的实体分离,可以避免这个问题。所以,在UPD1中几乎不可能不是真的有道理。虽然这并不能使原来的问题不那么重要。当您负责维护遗留代码时,例如,嘲笑QtSql是向系统引入测试的唯一现实的方法。

最佳答案
如果你只是想要一个内存SQL数据库作为QtSQL的模拟后端,你可以考虑使用SQLite

SQLite is an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. The code for SQLite is in the public domain and is thus free for use for any purpose, commercial or private. SQLite is the most widely deployed database in the world with more applications than we can count, including several high-profile projects.

在QtSQL调用之后使用真正的SQL解释器的优点是可以验证传入的SQL语法,以及查询是否实际返回预期的结果。

如果您关心的是测试执行Oracle SQL特定功能的SQL查询,则没有其他方法可以正确地使用这些功能,而无需对真正的Oracle SQL Server进行测试。

转载注明原文:c++ 有没有办法模拟QSqlQuery? - 代码日志