gpt4 book ai didi

c++ - 依赖网络时的 Qt 测试

转载 作者:行者123 更新时间:2023-11-28 04:57:29 25 4
gpt4 key购买 nike

我正在开发一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com