2017-10-20 2 views
0

Qt 프로젝트에서 작업 중이며 QNetworkAccessManager에 의존하는 함수에 대한 단위 테스트를 작성할 수 있어야합니다.네트워크에 의존하는 경우 Qt 테스트

Google 모의 이야기가 과도기처럼 보였습니다. 나는이 수업을 조롱하기 위해 "링커 트릭"을 사용하는 것이 좋습니다 this 대답을 발견했습니다. 그러나, 나는 C++ (그리고 일반적으로 C)에 대해 매우 익숙하다. 그리고 나는이 "트릭"을 사용하기로되어있는 정확한 방법을 이해하는데 다소 힘든 시간을 보내고있다. 수동으로 테스트를 실행하기 위해 헤더 파일을 변경해야합니까, 아니면이를 수행 할 수있는 더 좋은 방법이 있습니까 (필자가 가정하고 있음).

올바르게 수행하기위한 헤더/코드 구조에 대한 모든 종류의 예제가 엄청난 도움이 될 것입니다.

답변

1

링커 트릭을 사용할 수 있지만 QNetworkAccessManager를 서브 클래 싱 할 수 있으므로 더 쉽게 찾을 수 있습니다.

class FailQNetworkAccessManager : public QNetworkAccessManager 
{ 
    Q_OBJECT 
public: 
    FailQNetworkAccessManager(QObject *parent = Q_NULLPTR):QNetworkAccessManager(parent){} 

protected: 
    QNetworkReply* createRequest(Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = Q_NULLPTR) 
    { 
    QNetworkReply* rep = QNetworkAccessManager::createRequest(op, originalReq, outgoingData); 
    // Queue the abort to occur from main loop 
    QMetaObject::invokeMethod(req, "abort", Qt::QueuedConnection); 
    return rep; 
    } 
}; 

그런 다음 테스트 코드는 진짜가 아닌 FailQNetworkAccessManager와 클래스를 제공 할 수 있습니다 : 당신이 실제로 연결되지 않는 버전을 만들고 싶어

예를 들어, 같은 뭔가를 할 수 , 모든 요청은 생성되는 즉시 중단해야합니다. (이것은 단지 예제 코드 일 뿐이므로 실제로이 코드를 아직 시도하지 않았습니다.이 코드를 헤더 & cpp 파일로 분할하는 것이 좋습니다.)

또한 시스템에 내장 된 테스트 프레임 워크 인 Qt Test을 살펴 봐야합니다.

관련 문제