存在一点问题。我目前有一个我想测试的大型项目,而且大部分项目完全依赖于QNetworkAccessManager如何实际响应这些调用。由于我不能真正手动坐下来拔出以太网电缆,以获得我想要的结果,所以我想制作一个假QNAM。通常情况下,我只需要提供一个类接口,然后只是告诉使用它的对象具有一个基类指针,这样它就可以在不付出太多努力的情况下处理假指针和正确指针。如何创建一个虚假的QNetworkAccessManager
InterfaceQNAM &_manager; // should have virtual put, post, finished() etc that both
// the real QNAM and the fake one would derive
但是! Qt并没有真正实现接口,QNAM只是从QOobject继承而来,我真的不希望被代码松动,只是告诉类再次调用一个QObject(它没有虚拟放置,发布或其他任何东西)。它需要在类内部进行太多的代码更改(强制转换,两个不同的对象,这取决于我们将注入哪些内容等等。)..我将如何实际解决此问题?
看看请求的brach更改QtMock,但由于缺乏文档,我还没有能够启动并运行。
此外,从QNAM开始dervie,但由于即时通讯使用没有虚拟它的方法不会选择我的。
我的类看起来是这样的:
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,我可以插入到这个代码中,而不必更改太多?有没有什么好的设计模式或任何可以解决这个问题的东西?
请澄清:你想获得一个备用QNAM,似乎像一个真正的人,但实现不同?如果是这样,我会从QNAM中派生出来,并用“假”来隐藏“完整”功能。 –
@FlielixGalindoAllué我打算提出相同的建议,但请注意,您必须在项目的其余部分中将所有引用/指向QNAM的引用指向新派生类型,否则隐藏将不起作用。如果所有的资源在快速查找替换的地方都有效,这是一种可能性。否则,这将是非常非常混乱(如果它*是可能的,它将只是一个杂乱的水平)。 – tmpearce
即时试图创建一个QNAM仅用于测试,不包含任何逻辑,但只发出信号和错误代码取决于什么样的错误即时通讯尝试模拟 – chikuba