少し問題があります。私は現在、テストしたい巨大なプロジェクトを持っています。ほとんどの場合、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などがない)に対してすべての呼び出しを実行するようにクラスに指示します。クラス内でコードを大幅に変更する必要があります(キャスト、注入するオブジェクトに応じて2つの異なるオブジェクトなど)。これを実際に解決するにはどうすればよいですか?
要求されたブランチ変更QtMockを確認しましたが、ドキュメントが不足しているため、起動して実行することができませんでした。
また、QNAMから派生し始めましたが、仮想を使用していない方法なので、それは私のものを取り上げませんでした。
私のクラスは次のようになります。
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をどのように実行できるでしょうか。これを解決できる素晴らしいデザインパターンや何かがありますか?