我正在編寫我編寫的Qt5應用程序的單元測試,但是我很難理解如何處理涉及網絡的類。我的主類包括QTcpServer既可子類,它覆蓋QTcpServer既可:: incomingConnection創建ClientConnection對象並把它開了一個主題:如何創建用於測試QTcpSocket的依賴注入?
void NetworkServer::incomingConnection(qintptr socketDescriptor)
{
QThread* clientThread = new QThread();
ClientConnection* clientConnection = new ClientConnection(socketDescriptor);
clientConnection->moveToThread(clientThread);
// connect signals & slots to ClientConnection (removed for clarity)
connect(clientThread, &QThread::started, clientConnection, &ClientConnection::run);
clientThread->start();
}
的ClientConnection類使用socketDescriptor在專用線程中打開一個新的與QTcpSocket,從客戶端接收數據並對其進行處理。
ClientConnection::ClientConnection(int socketDescriptor, QObject *parent) :
QObject(parent), socketDescriptor(socketDescriptor)
{
tcpIncomingData = new QByteArray;
}
void ClientConnection::run()
{
QTcpSocket socket;
if(!socket.setSocketDescriptor(socketDescriptor)) {
emit sig_error(socket.error());
return;
}
if(socket.waitForReadyRead(5000)) {
*tcpIncomingData = socket.readAll();
qDebug() << "data received: " << tcpIncomingData;
} else {
qDebug() << "socket timed out!";
}
parseXmlData();
socket.disconnectFromHost();
socket.waitForDisconnected();
}
該課程尚未完成,但我現在要開始編寫測試。我的問題是如何處理socketDescriptor。我假設我需要使用某種依賴注入,但如果不在測試用例中創建一個完整的QTcpServer,我認爲這是不可行的。
現在測試網絡代碼必須是通用的,所以必須有一個通用的方法來處理這個問題,而不包括我的一半應用程序。這似乎是一個普遍的問題,但如果需要更多關於我的具體應用的細節,請告訴我。
p.s.你有沒有考慮過使用更高層次的網絡組件? –