Оскільки ви намагаєтесь "протестувати якийсь код класу", я справді рекомендую навчитися користуватися QTestLib . Він надає простір імен QTest та модуль QtTest, які містять ряд корисних функцій та об'єктів, включаючи QSignalSpy , за допомогою яких можна перевірити, чи видаються певні сигнали.
Оскільки ви врешті-решт інтегруєтесь із повним графічним інтерфейсом, використання QTestLib і тестування без сну або очікування дасть вам більш точний тест - той, який краще відображає справжні моделі використання. Але якщо ви вирішите не їхати цим шляхом, ви можете використовувати QTestLib :: qSleep, щоб зробити те, що ви просили.
Оскільки вам просто потрібна пауза між запуском насоса та його вимкненням, ви можете легко використовувати таймер одного пострілу:
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();
}
Але qSleep()
, безумовно, було б простіше, якщо все, що вас цікавить, - перевірити кілька речей у командному рядку.
EDIT : На основі коментаря, ось необхідні схеми використання.
По-перше, вам потрібно відредагувати файл .pro, щоб включити qtestlib:
CONFIG += qtestlib
По-друге, вам потрібно включити необхідні файли:
- Для простору імен QTest (що включає
qSleep
):#include <QTest>
- Для всіх елементів в
QtTest
модулі: #include <QtTest>
. Це функціонально еквівалентно додаванню включення для кожного елемента, що існує в просторі імен.
wait()
абоsleep()
досягнення?