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

Python Discussion :

Unittest : comment interrompre un test s'il est trop long ?


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut Unittest : comment interrompre un test s'il est trop long ?
    Bonjour à tous,

    Je viens de me poser une question très bête... et je n'ai aucun élément de réponse (je n'ai pas envie de faire un subprocess et tout le tralala...).

    Imaginez que vous ayez 30 fois le même tp à corriger. Pourquoi ne pas le faire automatiquement avec des tests unitaires ?

    Oui..., mais si l'un des étudiants à fait une boucle infini dans sa fonction que l'on est en train de tester ???

    Autrement dis :
    comment interrompre un test, dans une série de test, si celui-ci est trop long (disons > 10s) pour se finir ???

    La situation typique serait la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def fonction_a_tester(n):
        while 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import unittest
     
    from ... import fonction_a_tester
     
    class TestFonctionATester(unittest.TestCase):
        def test_infini(self):
            self.assertEqual(fonction_a_tester(1), 1,
                                  msg = "fonction_a_tester(1) ne renvois pas le bon resultat")
     
    if __name__ == '__main__':
        unittest.main
    Comment feriez vous pour faire échouer test_infini rapidement avec une exception de type TimeError ?

    Milles mercis pour votre aide,

  2. #2
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Bonsoir,

    Vous avez le module time.sleep(10) de disponible, il vous suffit de l'importer et de faire en sorte que la boucle s'arrête au bout de 10 seconde, exemple ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import time
     
    test = True
    compteur = 0
    while test:
        time.sleep(1)
        compteur +=1
        print(compteur)
        if compteur == 10:
            print("Fin de boucle")
            test = False
     
    # le True évite d'utiliser un break si maintenant vous préfèrez le break:
    compteur = 0
    while 1:
        time.sleep(1)
        compteur +=1
        print(compteur)
        if compteur == 10:
            print("Fin de boucle")
            break
    J'ai mis du print histoire de décorer, mais en retirant tout ça, votre code sera plus court !
    le compteur prend +1 par seconde, donc une fois à 10, ça fait 10 secondes
    Je ne sais pas si ma méthode et la meilleur et si elle répond à vos attentes, mais au moins, vous avez un début de solution !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup papyfouette pour ta réponse.

    Je n'ai pas du être parfaitement clair dans ma demande, mais cela n'est pas grave car ça affine la demande :

    L'objectif est de ne pas toucher à la fonction , mais uniquement au test unitaire... Dans le cas contraire la correction ne serait pas automatique...

    Si quelqu'un a une autre idée ?

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Peut-être peux-tu adapter ces fonctions proposées sur ce site, faut faire des tests
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Effacer des répertoires dont le path est trop long
    Par thetraveller dans le forum Windows XP
    Réponses: 5
    Dernier message: 21/05/2007, 10h35
  2. Retour a la ligne dans un textarea quand le mot est trop long
    Par avogadro dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/11/2006, 15h35
  3. [VB6]Message d'erreur si le temps d'exécution est trop long
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 14/09/2006, 16h43
  4. 3047 - L'enregistrement est trop long ??????
    Par jbaudin dans le forum Access
    Réponses: 4
    Dernier message: 15/11/2005, 11h29
  5. Réponses: 1
    Dernier message: 19/09/2005, 15h44

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