ich die folgenden zwei einfachen Methoden in einer Qt-Konsolenanwendung haben:Prüfnorm mit Signalen und Slots
void Webservice::getFile(PostElement el)
{
parameter = ⪙
QUrl url(PATH);
QUrlQuery query;
query.addQueryItem(el.getParam(), el.getValue());
url.setQuery(query);
request.setUrl(url);
manager->get(request);
connect(manager, SIGNAL(finished(QNetworkReply*)), this,
SLOT(downloadCompleted(QNetworkReply*)));
}
void Webservice::downloadCompleted(QNetworkReply *reply)
{
QByteArray b = reply->readAll();
qDebug() << "Download completed!";
QFile file("/tmp/" + parameter->getValue());
file.open(QIODevice::WriteOnly);
file.write(b);
file.close();
reply->deleteLater();
}
Ich habe ein QTest Projekt getFile
Methode zu testen.
#include <QtTest>
#include <QCoreApplication>
// add necessary includes here
#include "webservice.h"
class WebserviceTest : public QObject
{
Q_OBJECT
public:
WebserviceTest();
~WebserviceTest();
private:
Webservice ws;
private slots:
void initTestCase();
void cleanupTestCase();
void getFile();
};
WebserviceTest::WebserviceTest()
{
}
WebserviceTest::~WebserviceTest()
{
}
void WebserviceTest::initTestCase()
{
}
void WebserviceTest::cleanupTestCase()
{
}
void WebserviceTest::getFile()
{
PostElement el{"file", "myPic.png"};
ws.getFile(el); // it should wait for the slot to be executed
}
QTEST_MAIN(WebserviceTest)
#include "tst_webservicetest.moc"
Wie Sie sehen können, hat es Signale und Steckplätze. Wenn ich das auf meinem ursprünglichen Projekt ausführe, sehe ich, dass downloadCompleted
ohne Probleme ausgeführt wird (weil es die Ereignisschleife verwendet). Aber im Testprojekt wird der Slot nicht aufgerufen. Ich habe gegoogelt und einige Beispiele mit QSignalSpy gefunden, aber im Moment habe ich den Slot nicht erfolgreich ausgeführt.
Wie kann ich meinen Test "warten", bis der Slot fertig ist?
Thank dich so sehr! Ich kann jetzt testen :) Ich empfehle, 'el' auf' QSignalSpy' zu 'ws' zu ändern, weil es das Signal hat – Chu