問題が少しあります。私は現在、テストしたい巨大なプロジェクトを持っており、そのほとんどは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(仮想put、postなどがあります)をすべて呼び出すようにクラスに指示してください。クラス内でコードの変更が多すぎる必要があります(キャスト、どちらに注入するかによって2つの異なるオブジェクトがあります)。どうすればこの問題を解決できますか?
要求されたbrachの変更QtMockを見ましたが、ドキュメントが不足しているため、起動して実行できませんでした。
また、QNAMからdervieを起動しましたが、私はそれを使用していないので、私はそれを選択しませんでした。それは、その後、REST要求を行い、それが終了しています時にチェックするために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をどうすればできますか?これを解決する良いデザインパターンや何かがありますか?
を明確にしてください:あなたは本物のように見えますが、異なる実装の代替QNAMを取得しようとしていますか?このような場合は、QNAMから派生し、「偽の」機能で「完全な」機能を非表示にします。 –
@FèlixGalindoAllué私は同じことを提案しようとしましたが、プロジェクトの残りのQNAMへのすべての参照/ポインタを新しく派生した型を参照しなければならないことに注意してください。そうしないと隠蔽は機能しません。すばやい検索交換が動作する場所のすべてのソースが可能であれば、これが可能です。さもなければ、これは非常に乱雑になります(もし可能ならば、単なるレベルの乱雑です)。 – tmpearce
私はQNAMをテスト用に作成しようとしていますが、ロジックを含んでいませんが、エラーをシミュレートしようとしている間違いに応じて信号とエラーコードを出力します。 – chikuba