我正在开发一个 Qt 项目,我需要能够为依赖于 QNetworkAccessManager 的函数编写单元测试。
Google Mock 对我来说似乎有点矫枉过正,我找到了 this建议使用“链接器技巧”来模拟类(class)的答案。但是,我对 C++(和一般的 C)还很陌生,而且我很难理解我应该使用这个“技巧”的确切方式。我应该手动更改头文件来运行测试,还是有更好的方法来做(我假设有)。
任何类型的 header /代码结构示例都将是一个巨大的帮助。
最佳答案
您可以使用链接器技巧,但由于 QNetworkAccessManager 可以被子类化,您可能会发现这样做更容易。
例如,如果你想制作一个实际上没有连接的版本,你可以这样做:
class FailQNetworkAccessManager : public QNetworkAccessManager
{
Q_OBJECT
public:
FailQNetworkAccessManager(QObject *parent = Q_NULLPTR):QNetworkAccessManager(parent){}
protected:
QNetworkReply* createRequest(Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = Q_NULLPTR)
{
QNetworkReply* rep = QNetworkAccessManager::createRequest(op, originalReq, outgoingData);
// Queue the abort to occur from main loop
QMetaObject::invokeMethod(req, "abort", Qt::QueuedConnection);
return rep;
}
};
然后您的测试代码可以为您的类提供 FailQNetworkAccessManager 而不是真正的类,并且所有请求都应在创建后立即中止。 (这只是示例代码,我还没有实际尝试过这段代码 - 我还建议将其拆分为头文件和 cpp 文件)。
您还应该看看 Qt Test系统,这是内置的测试框架。
关于c++ - 依赖网络时的 Qt 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46847942/