Da Sie versuchen, "Klassencode zu testen", würde ich wirklich empfehlen, den Umgang mit QTestLib zu lernen . Es bietet einen QTest-Namespace und ein QtTest-Modul , die eine Reihe nützlicher Funktionen und Objekte enthalten, einschließlich QSignalSpy , mit dem Sie überprüfen können, ob bestimmte Signale ausgegeben werden.
Da Sie sich irgendwann in eine vollständige Benutzeroberfläche integrieren werden, erhalten Sie durch die Verwendung von QTestLib und das Testen ohne Schlafen oder Warten einen genaueren Test, der die tatsächlichen Verwendungsmuster besser darstellt. Sollten Sie sich jedoch dafür entscheiden, diesen Weg nicht zu gehen, können Sie QTestLib :: qSleep verwenden , um das zu tun, was Sie angefordert haben.
Da Sie zwischen dem Starten und Abschalten der Pumpe nur eine Pause benötigen, können Sie problemlos einen Timer mit einem Schuss verwenden:
class PumpTest: public QObject {
Q_OBJECT
Pump &pump;
public:
PumpTest(Pump &pump):pump(pump) {};
public slots:
void start() { pump.startpump(); }
void stop() { pump.stoppump(); }
void stopAndShutdown() {
stop();
QCoreApplication::exit(0);
}
void test() {
start();
QTimer::singleShot(1000, this, SLOT(stopAndShutdown));
}
};
int main(int argc, char* argv[]) {
QCoreApplication app(argc, argv);
Pump p;
PumpTest t(p);
t.test();
return app.exec();
}
Aber es qSleep()
wäre definitiv einfacher, wenn Sie nur ein paar Dinge in der Befehlszeile überprüfen würden.
BEARBEITEN : Basierend auf dem Kommentar sind hier die erforderlichen Verwendungsmuster.
Zuerst müssen Sie Ihre .pro-Datei bearbeiten, um qtestlib einzuschließen:
CONFIG += qtestlib
Zweitens müssen Sie die erforderlichen Dateien einschließen:
- Für den QTest-Namespace (einschließlich
qSleep
):#include <QTest>
- Für alle Elemente im
QtTest
Modul : #include <QtTest>
. Dies entspricht funktional dem Hinzufügen eines Includes für jedes Element, das im Namespace vorhanden ist.
wait()
odersleep()
erreichen?