模拟远程 HTTPS API 以对我的 QML 应用程序进行单元测试的好方法是什么?

模拟远程 HTTPS API 以对我的 QML 应用程序进行单元测试的好方法是什么?

我正在修改一个 QML 应用,该应用通过 HTTPS 与远程 REST API 交互。该应用的“客户端”部分整齐地打包成一个组件,我想对其进行单元测试,但我不想每次运行测试时都依赖于可用的远程服务,也不想提交实际事务。相反,我想模拟远程服务。

有什么好办法吗?我正在 Ubuntu Trusty 上进行开发,使用 Ubuntu SDK 1.119。

答案1

如果与远程 API 对话并解析结果的所有逻辑都以 C++ 的形式作为组件插件,则可以使用googlemock库(与google-mockUbuntu 中一样打包)用于创建模拟预期结果和数据的单元测试。但是,如果服务器上的 API 发生变化,即使测试通过,您的代码仍可能会失败,因为您只测试一些已知的预期结果。

另一个选择是在代码中引入环境变量,以便你可以将基本 URL 指向其他位置,例如本地主机:12345,并用 Python 或其他语言实现一个模拟 HTTP 服务器,该服务器在随机高端口上运行,您可以将测试指向该端口。这使得运行测试变得稍微复杂一些,因为您需要从服务器脚本中获取随机端口,并以某种方式将其传递给测试。您可以在纯 HTTP 上运行此测试,或创建 CA 证书和服务器证书(包含在测试套件中),并添加某种方式来确保网络库可以将 CA 加载到证书链中以验证本地 HTTPS 连接。但是,这一切都非常复杂,并且不会比使用虚假数据的简单单元测试提供更有用的结果。

除此之外,您只能与具有实际有效证书的实际服务器通信。理想情况下,远程服务将提供一个临时/测试服务器来进行此类测试,您可以在代码中引入环境变量或类似变量,将其指向临时/测试服务器,而不是实时服务器。

相关内容