有点问题。我目前有一个要测试的大型项目,其中大部分是否完全取决于 QNetworkAccessManager 实际响应调用的方式。由于我不能真正手动坐下并拔出以太网线以获得我想要的结果,所以我想制作一个假 QNAM。通常,我只会派生出与类派生出的相同接口,然后告诉使用它的对象有一个基类指针,这样它就可以毫不费力地处理假的和正确的。
InterfaceQNAM &_manager; // should have virtual put, post, finished() etc that both
// the real QNAM and the fake one would derive
然而!Qt 并没有真正做接口,QNAM 只继承自 QOobject,我真的不想对我的代码那么松散,只是告诉类对 QObject 进行所有调用(它没有虚拟 put、post 或任何东西)。这将需要在类内进行太多的代码更改(强制转换,两个不同的对象,具体取决于我们将注入的对象 etc..etc..) 我将如何实际解决这个问题?
查看了请求的分支更改 QtMock 但由于缺乏文档,我无法启动并运行它。
此外,开始从 QNAM dervie,但由于我使用 arent virtual 的方法,它不会拿起我的。
我的班级看起来像这样:
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,我可以插入到这个代码中,而不必做太多的改变呢?有什么好的设计模式或任何可以解决这个问题的方法吗?