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 : connaître le dernier test qui pose problème


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut unittest : connaître le dernier test qui pose problème
    Bonjour,
    pour le moment j'utilise le code ci-dessous pour des tests unitaires.
    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
    class MathFormulaGoodInput(unittest.TestCase):
        good_formulas = [
    # SIMPLE THINGS
            '3**x**2',
            '(3+2)**[x+5]**{2-4}',
            '(1+5)/(7-5)',
    # FUNCTIONS
            'cos x',
            'cos(x)',
                       ]
     
        def test_good_formula(self):
            print('')
            for oneGoodFomula in self.good_formulas:
                print('\t-->  ' + oneGoodFomula)
                self.assertIsNotNone(mathFormula.parser(oneGoodFomula))
    Ce code me permet de connaître la formule qui pose problème, c'est la dernière affichée. Malheureusement, cela a l'inconvénient de tout afficher donc quand il y aura plein d'autres tests, ce qui va arriver très vite, cela ne sera pas fonctionnel.

    Ma question. Peut-on demander à unittest de donner juste la formule qui ne répond pas au test ?

    Une autre idée serait d'écrire un fichier log mais j'aimerais mieux que tout passe par la console.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,
    Les self.assertXXX acceptent généralement plusieurs paramètres dont le dernier optionnel est le message à afficher lorsque le test 'plante', genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                self.assertIsNotNone(mathFormula.parser(oneGoodFomula), '\t-->  ' + oneGoodFomula)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Merci pour cette info.

    J'ai essayé sans succès. Le message n'apparait pas.

    En attendant je vais utiliser l'horreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try:
        self.assertIsNotNone(mathFormula.parser(oneGoodFomula))
    except:
        print('\t-->  ' + oneGoodFomula)
        self.assertIsNotNone(mathFormula.parser(oneGoodFomula))
    Il y a doublon dans le message d'exception levée mais à choisir, je préfère cela aux centaines de chaînes que j'aurais à tester.

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    En fait, je vois ce qui ne marche pas. Dans mon cas, je propose des formules et mon programme comporte un bug qui doit être repéré.

    Une idée ?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    La question est de savoir ce qu'est supposé retourner
    mathFormula.parser(oneGoodFomula)
    lorsque çà se passe "mal".

    Si on dit "çà se passe bien si le retour is not None", dans le cas contraire, la formule est à priori invalide et l'afficher pour savoir laquelle semble raisonnable.
    Si on dit, "çà se passe bien ou çà lève une exception"... ben c'est autre chose...
    Mais c'est toi qui voit...

    Vu de loin, il faudrait peut être réfléchir au plan de test: empiler des entrées pour voir ce que çà donne n'est pas une bonne structure pour s'assurer que "parser" fait ce qu'on attend de lui dans les différents cas...
    Note: en test unitaires, les différents cas dépendent de son implémentation. En test fonctionnels, ca dépendra plutôt du cahier des charges. Ici, j'ai l'impression qu'on est entre les deux...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La question est de savoir ce qu'est supposé retourner mathFormula.parser(oneGoodFomula) lorsque çà se passe "mal".
    ...
    Si on dit, "çà se passe bien ou çà lève une exception"... ben c'est autre chose...
    En fait, j'ai besoin dans un premier temps de vérifier que les derniers changements dans mon code continuent à traiter correctement mes formules, ceci ne veut pas dire que ce qui est produit par mathFormula.parser est bien juste. En fait, c'est juste pour repérer les gros bugs.

    Concrètement, mathFormula.parser produit un arbre d'une formule, arbre non adapté à la production de tests unitaires, d'où ma demande un peu particulière.

    Citation Envoyé par wiztricks Voir le message
    Vu de loin, il faudrait peut être réfléchir au plan de test...
    Une petite sieste réparatrice plus tard, je suis arrivé à ce que je voulais avec l'astuce suivante :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    class GoodError(ValueError):
        pass
     
    def TestGoodFormula(oneGoodFomula):
        try:
            mathFormula.parser(oneGoodFomula)
            eveythingSeemsOk = True
        except:
            print('',
                  '    --->>  ' + oneGoodFomula + '  <<---',
                  sep = '\n')
            eveythingSeemsOk = False
     
        if eveythingSeemsOk:
            raise GoodError
     
    class MathFormulaGoodInput(unittest.TestCase):
        good_formulas = [
    # SIMPLE THINGS
            '1,4',
            '(7)',
            '4+7',
            '(x) + 4',
            '(-2x + 4)',
            '3**x**2',
            '(3+2)**[x+5]**{2-4}',
            '(1+5)/(7-5)',
    # FUNCTIONS
            'cos x',
            'cos(x)',
            'cos(x+4)',
                       ]
     
        def test_good_formula(self):
            sys.stdout.write('')
            for oneGoodFomula in self.good_formulas:
                self.assertRaises(GoodError, TestGoodFormula, oneGoodFomula)
    Ceci me permettra de vérifier mon code sur des formules sans erreur. Je viens de mettre cela en route, et cela m'a permis de repérer une régression suite au changement du code d'une fonctionnalité. C'est exactement ce genre de choses que je voulais faire.

    Plus tard, je vérifierais que l'arbre produit n'est pas délirant de façon indirecte car j'ai un module qui partant de l'arbre produit par mathFormula.parser produit une version texte. Je pourrais alors faire des tests unitaires sur ces bonnes formules.

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

Discussions similaires

  1. [XSL-FO] Un if test qui pose problème
    Par tapiou dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/10/2011, 10h22
  2. [D5] Transtypage qui pose problème
    Par MelkInarian dans le forum Delphi
    Réponses: 4
    Dernier message: 06/04/2007, 16h38
  3. requete update qui pose problème
    Par kirian dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/02/2007, 11h20
  4. code qui pose problème
    Par onePersonne dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/10/2006, 14h27
  5. Un cast de SmartPointer qui pose probléme
    Par Higestromm dans le forum C++
    Réponses: 3
    Dernier message: 13/10/2005, 10h25

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