IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Délai très long lors de l'usage du QCoreApplication::quit dans les tests unitaires


Sujet :

Qt

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut Délai très long lors de l'usage du QCoreApplication::quit dans les tests unitaires
    Bonjour,

    Lorsque j'effectue le simple code suivant, j'obtient le résultat escompté: au bout d'une seconde, on quitte l'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main(int argc, char** argv)
    {
    	QCoreApplication app(argc, argv);
    	QTimer::singleShot(1000,&app,&QCoreApplication::quit);
    	return app.exec();
    }
    maintenant si je met ce code dans la méthode d'une classe pour utiliser les tests unitaires de Qt (QTest), la fin de execution de ce test s'effectue au bout de 200 secondes.

    Je suis sûr que `QCoreApplication::quit()` a bien été appelé, parce que si j'enlève le `singleShot`, le test se termine avec une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FATAL default: Test function timed out
    mais je souhaiterais que le test ne dure pas les 200 secondes.

    y a t'il un moyen d'y parvenir?

    ps:
    OS: Microsoft Window 10
    Qt: v5.13

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    J'ai testé la solution préconisée dans cette réponse de discussion.

    Ainsi on peut choisir la durée du timeout des tests en modifiant la valeur de la variable d'environnement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    qputenv("QTEST_FUNCTION_TIMEOUT","5000");
    Cet appel doit s'effectuer dans le constructeur de la classe de test.

    Maintenant, malgré que le timeout est effectivement plus court, le résultat du test est tout le temps considéré comme échoué. J'ai donc enlevé cette commande pour vérifier de nouveau le fonctionnement du code, puis j'ai testé avec un timeout comme celui par défaut qui a réussit (200 secondes ne fonctionne pas, il faut choisir une durée légèrement plus longue).

    Je suis aussi tombé sur cette discussion qui décrit l'impossibilité d'aller au delà d'un test de 600 secondes. Dans les deux discutions, il est question d'augmenter le timeout, plutôt que le diminuer.

    Dans les deux discutions, le timeout par défaut est de 300 secondes alors que dans le mon cas, il est de 200 secondes. J'ai tenté de le faire passer à 300 secondes et je remarque que la durée reste au alentour de 200 secondes.

    J'en conclus que:
    - le comportement par défaut du timeout n'est pas le même dans mon cas que dans le cas des deux discutions (version de Qt? système de compilation? compilateur?);
    - dans mon cas il est possible de diminuer le timeout, mais le l'acceptation du test ne s'effectue que si on attend le timeout par défaut;

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    J'ai finalement un peu avancé sur sur le sujet: je travaille avec CMAKE et non pas QMAKE. Avec QMAKE, le `QTimer::singleShot(10000,_app, &QCoreApplication::quit);` répond convenablement et n'attend pas la fin du timeout.

    Il doit donc s'agir d'un problème dans le CMakeList.txt. Je remarque bien quelques différences entre mon fichier de configuration et celui présenté par Qt:
    - `enable_testing()` au lieu de `enable_testing(true)`
    - `add_test(NAME Tests COMMAND Tests)` au lieu de `add_test(NAME Tests COMMAND Tests)`
    - `target_link_libraries(Tests Qt5::Test AutresLibs)` au lieu de `target_link_libraries(Tests PRIVATE Qt5::Test AutresLibs)`

    mais aucune corrections ne fonctionnent.

    Je me demande si le plus simple ne serait pas d'utiliser autre chose pour les tests.

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 41
    Points : 78
    Points
    78
    Par défaut
    Bon, j'ai trouvé mon problème:
    Lorsque j'ai voulu adapter mon code à un code minimaliste pour comprendre mon problème, j'ai omis de commenter un appel à une fonction qui prenait 200 secondes.

    Il ne s'agit pas d'un problème lié à Qt mais à une étourderie de ma part qui revenait à écrire le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QTimer::singleShot(1000,&app,&QCoreApplication::quit);
    app.exec();
    sleep(200); // 200 secondes
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Délais de fermeture de session TSE très longs
    Par cramnirab dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 10/09/2012, 09h17
  2. Télécharger java,délai anormal très long
    Par fletcher30 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 04/11/2010, 21h48
  3. ouverture d'un formulaire: délai très long
    Par marechal dans le forum IHM
    Réponses: 3
    Dernier message: 12/04/2010, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo