在这种情况下,我真的可以使用一些帮助来模拟依赖项。
我有一个需要测试的客户端功能。它需要一个第 3 方 API 资源并在其上调用一个方法,并用输出填充其其余参数:
void ClassA::enumerateConnectedDevices(ThirdPartyAPI::BusManager & busMgr, QList<QByteArray> &devices, QStringList &descriptions)
在此函数流程的某个时刻,它调用了签名如下所示的 busMgr 对象:
ThirdPartyAPI::Error busMgr.GetNumOfCameras(...)
使用该调用的客户端代码如下所示:
ThirdPartyAPI::Error err = busMgr.GetNumOfCameras(&numCameras);
if (err != ThirdPartyAPI::ERROR_OK) { // compares against some enum
cout << "Error: " << err.GetDescription();
}
我遇到的问题是从 GetNumberOfCameras 返回的错误副本到 err 局部变量。在制作副本之前,模拟 BusManager 和 Error 类是有效的。由于模拟错误是 ThirdPartyAPI::Error 的子类,因此赋值运算符将模拟切掉。第三方 API 构造有效的错误对象并返回它们。客户端代码只能复制构造或分配它们。
我所需要的只是从我的模拟 BusManager 返回有效的模拟错误对象,以便 SUT 方法可测试。只要意图保持不变,我愿意重构 SUT 方法。
任何建议将不胜感激!
干杯,
亚历克斯