派生クラスで定義した仮想関数をGoogleTestで呼び出す際に問題があります。GoogleTestでテストするときに、派生クラスの仮想関数が呼び出されない
QTcpServerから派生したQtを使用してクラスMyServerを作成しました。 GoogleTestの外でこのコードを実行すると、プログラムは正常に動作します。 GoogleTestでプロジェクトを作成すると、クラス内のincomingConnectionが呼び出されることはありません。 QTcpServer :: incomingConnectionが呼び出しを受け取るかのように、ソケットは受け入れられます。
MyThreadは、作成されたMyServerに通常接続されている信号ReadySocket()を送出します。テストの際、私はシグナルを受け取るMyServerTesterクラスを作成し、私がアサートできるフラグを設定しました。
私は、次のコードを使用して、incomingConnectionにブレークポイントを設定し、サーバーを起動し、クライアントに接続します。接続は受け入れられ、MyServer :: incomingConnectionは入力されません。そのため、MyThreadは決して作成されません。
プロジェクト:サーバーのファイル:MyServer.h
class MyServer : public QTcpServer
{
Q_OBJECT
public:
MyServer(QObject *parent = 0);
protected:
void incomingConnection(qintptr socketDescriptor) Q_DECL_OVERRIDE;
}
プロジェクト:サーバーのファイル:MyServer.cpp
#include "MyServer.h"
MyServer::MyServer(QObject *parent) : QTcpServer(parent) { }
void MyServer::incomingConnection(qintptr socketDescriptor)
{
MyThread *thread = new MyThread(socketDescriptor, this);
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
}
プロジェクト:Server_Testファイル:main.cppに
#include <QtCore/QCoreApplication>
#include "gtest\gtest.h"
#include "..\Server\MyServer.h"
TEST(MyServer, Successful_Connection)
{
MyServer server;
server.listen(QHostAddress::AnyIPv4, 4444);
QThread::sleep(30);
}
int main(int argc, char*argv[])
{
QCoreApplication a(argc, argv);
::testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
return a.exec()
}
この回答に感謝します。私は[Qt Test](http://doc.qt.io/qt-5/qttest-index.html)を使用しました。追加します。イベントループを必要とするテストでは、initTestCase関数内でqApp-> processEvents()を実行します。 –