• 1000 test init, cleanup или test case.
Однако я также пытаюсь вызвать сервер на локальном хосте, к которому можно подключиться, и для этого требуется, чтобы слоты вызывались обратно, когда слушатель принимает соединение и закрывает , et c.
QTest хочет рассматривать эти обратные вызовы как тестовые примеры и запускает их, что неверно. Как мне сказать, что «это слоты для ваших тестовых случаев» и «это слоты, которые используются где-то еще?»
Рассмотрим этот тестовый код:
#include <QCoreApplication>
#include <QtTest>
#include <QtWebSockets/qwebsocket.h>
#include <QtWebSockets/qwebsocketserver.h>
#include <string>
class qtwebstompclientimpl_tests : public QObject
{
Q_OBJECT
public:
qtwebstompclientimpl_tests();
~qtwebstompclientimpl_tests();
private slots:
void initTestCase();
void cleanupTestCase();
void onAccept(); // Wants to run these as test cases, but they are actually slots for QWebSocketServer
void onAcceptError(QAbstractSocket::SocketError socketError);
void onTextReceived(QString message);
void onClientClosed();
void test_case1();
private:
QWebSocketServer * m_webSocketServer;
QWebSocket * m_connectedWebsocketClient;
bool m_errorOccurred;
QString m_lastMessage;
};
qtwebstompclientimpl_tests::qtwebstompclientimpl_tests() {}
qtwebstompclientimpl_tests::~qtwebstompclientimpl_tests() {}
void qtwebstompclientimpl_tests::initTestCase()
{
m_webSocketServer = new QWebSocketServer("Test Server", QWebSocketServer::NonSecureMode);
if( !m_webSocketServer->listen(QHostAddress::Any, 5000) )
{
std::string errorMessage = m_webSocketServer->errorString().toStdString();
throw std::runtime_error("Failed to setup test websocket server - Listen failed");
connect(m_webSocketServer, &QWebSocketServer::newConnection, this, &qtwebstompclientimpl_tests::onAccept);
connect(m_webSocketServer, &QWebSocketServer::acceptError, this, &qtwebstompclientimpl_tests::onAcceptError);
}
m_connectedWebsocketClient = nullptr;
m_errorOccurred = false;
}
void qtwebstompclientimpl_tests::cleanupTestCase()
{
if( m_connectedWebsocketClient )
{
delete m_connectedWebsocketClient;
}
delete m_testClient;
delete m_webSocketServer;
}
void qtwebstompclientimpl_tests::onAccept()
{
if(m_connectedWebsocketClient)
{
m_connectedWebsocketClient->close();
}
m_connectedWebsocketClient = m_webSocketServer->nextPendingConnection();
connect(m_connectedWebsocketClient, &QWebSocket::textMessageReceived, this, &qtwebstompclientimpl_tests::onTextReceived);
connect(m_connectedWebsocketClient, &QWebSocket::disconnected, this, &qtwebstompclientimpl_tests::onClientClosed);
}
void qtwebstompclientimpl_tests::onAcceptError(QAbstractSocket::SocketError socketError)
{
m_errorOccurred = true;
}
void qtwebstompclientimpl_tests::onTextReceived(QString message)
{
QWebSocket * client = qobject_cast<QWebSocket *>(sender());
if(client == m_connectedWebsocketClient)
{
m_lastMessage = message;
}
}
void qtwebstompclientimpl_tests::onClientClosed()
{
QWebSocket * client = qobject_cast<QWebSocket *>(sender());
if(client == m_connectedWebsocketClient)
{
m_connectedWebsocketClient->deleteLater();
}
}
void qtwebstompclientimpl_tests::test_case1()
{
QVERIFY(true);
}
QTEST_MAIN(qtwebstompclientimpl_tests)