有点问题。我目前有一个要测试的庞大项目,而大多数项目是否完全取决于QNetworkAccessManager实际如何响应调用。由于我不能真正手动坐下来并拔出以太网线只是为了得到结果,所以我想制作一个假QNAM。通常,我只是继承一个类继承的接口(interface),然后告诉使用它的对象具有一个基类指针,这样它就可以毫不费力地处理伪造的和正确的一个。
InterfaceQNAM &_manager; // should have virtual put, post, finished() etc that both
// the real QNAM and the fake one would derive
然而! Qt并没有真正做接口(interface),并且QNAM只继承自QOobject,我真的不想让我的代码变得那么松散,只告诉类再次进行所有调用,再调用QObject(没有虚拟放置,发布或任何操作)。这将需要在类内部进行过多的代码更改(广播,两个不同的对象,具体取决于我们注入(inject)的对象等等。)等等。我将如何实际解决这个问题?
看看请求的分支更改QtMock,但是由于缺少文档,所以我无法启动它并运行。
同样,开始从QNAM撤出,但由于使用iment虚拟机的方法并没有被采用。
我的课看起来像这样:
class BaseRequest : public QObject {
Q_OBJECT
protected:
QNetworkAccessManager &_manager;
QPointer<QNetworkReply> _reply;
QPointer<IParser> _parser;
public:
BaseRequest(QNetworkAccessManager &manager, IParser *parser = 0, QObject *parent = 0)
: QObject(parent), _manager(manager), _reply(0), _retryCount(0), _parser(parser) {}
virtual ~BaseRequest();
}
然后它将使用QNAM进行REST请求并检查完成时间。
那么,如何能够做一个伪QNAM并插入到此代码中而又无需对其进行过多更改呢?是否有任何不错的设计模式或任何可以解决此问题的方法?
最佳答案
从问题的评论中,让我提出详细的答案:
class MyNAM : public QNetworkAccessManager
{
bool fakedNAM; // with setter and getter functions also...
...
QNetworkReply * post ( const QNetworkRequest & request, const QByteArray & data )
...
}
...
QNetworkReply *MyNAM::post ( const QNetworkRequest & request, const QByteArray & data )
{
if (fakedNAM) {
// your debugging code
}
else {
return QNetworkAccessManager::post(request, data);
}
}
关于c++ - 如何创建伪造的QNetworkAccessManager,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10490537/