Étant donné que vous essayez de "tester un certain code de classe", je vous recommande vraiment d'apprendre à utiliser QTestLib. Il fournit un espace de noms QTest et un module QtTest qui contiennent un certain nombre de fonctions et d'objets utiles, y compris QSignalSpy que vous pouvez utiliser pour vérifier que certains signaux sont émis.
Comme vous finirez par vous intégrer à une GUI complète, utiliser QTestLib et tester sans dormir ou attendre vous donnera un test plus précis - un test qui représente mieux les véritables modèles d'utilisation. Cependant, si vous choisissez de ne pas suivre cette voie, vous pourriez utiliser QTestLib::qSleep pour faire ce que vous avez demandé.
Comme vous avez juste besoin d'une pause entre le démarrage de votre pompe et son arrêt, vous pourriez facilement utiliser un minuteur à coup unique :
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();
}
Mais qSleep()
serait certainement plus facile si tout ce qui vous intéresse est de vérifier quelques choses sur la ligne de commande.
MODIFICATION : En fonction du commentaire, voici les modèles d'utilisation requis.
Tout d'abord, vous devez modifier votre fichier .pro pour inclure qtestlib :
CONFIG += qtestlib
Deuxièmement, vous devez inclure les fichiers nécessaires :
- Pour l'espace de noms QTest (qui inclut
qSleep
) : #include
- Pour tous les éléments du module
QtTest
: #include
. Cela équivaut fonctionnellement à ajouter une inclusion pour chaque élément qui existe dans l'espace de noms.
0 votes
Que testez-vous exactement? Que fait-on en ajoutant une fonction
wait()
ousleep()
?1 votes
Je crée une classe pour piloter une pompe péristaltique en utilisant des commandes sérielles RS232. J'ai créé une interface graphique en QT mais en attendant, je teste simplement les fonctions que j'ai créées à partir d'une fonction main() dans la console. Ainsi, je veux que la classe soit compilée par QT mais en même temps je veux que mypump.startpump(); sleep(1000); mypump.stoppump(); par exemple, juste pour tester que cela fonctionne.
0 votes
Malgré la compilation avec QT, j'utilise CONFIG += console pour exécuter et afficher les chaînes de débogage dans la console.
8 votes
QObject().thread()->usleep(1000*1000*seconds);
dormira pendantseconds
secondes :)0 votes
Je souhaite que vous pouviez voter positivement pour les commentaires. La réponse de mlvijr a parfaitement fonctionné. Vous devriez en faire une réponse.