Partage
  • Partager sur Facebook
  • Partager sur Twitter

pytest: tests dans un dossier

faire les bon imports pour les tests

    16 janvier 2019 à 16:44:08

    Bonjour,

    voici comment se présente mon exercice ( j'apprends pytest ):

    essai/

        fonctions/

            fonction_a_tester.py

        tests/

            test_fonction.py

    je souhaite , lorsque j'appelle pytest dans mon terminal, qu'il trouve le (les) test(s) à effectuer,

    car pour l'instant , j'ai un problème d'import:

    dans test_fonction.py j'ai :

    from essai.fonctions import fonction_a_tester

    il me met une erreur pour la collection:

    ModuleNotFoundError: No module named 'essai'

    fonction_a_tester.py ne contient que des def add() , def product(), ...

    il y aurait du __init__.py et du Setup.py que je ne serais pas surpris, d'ailleurs j'en ai mis mais apparemment pas au bon endroit . Et peut-être mal rempli ( si dès fois il faut les remplir ).

    Donc, voilà, comment fait_on pour tester sa fonction dans ce cas ?

    Merci,

    Laurent

    -
    Edité par LaurentG37 16 janvier 2019 à 16:46:21

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 janvier 2019 à 17:32:34

      Le dossier tests devrait être à coté du dossier essai, pas dedans.

      myprog/
          docs/
          	...
          myprog/
              ...
          tests/
              ...
          LICENSE
          Makefile
          setup.py
          ...
      
      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2019 à 21:46:47

        Alors d'après ce que tu montres dans ton message (idiotbête ),

        un fichier python contenu dans myprog pourrait être testé dans cette configuration, le Setup en fin  et

        c'est tout ? , je vais essayer demain ...

        Je raconterait la suite

        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2019 à 7:28:10

          Tu peux ajouter le dossier de ton projet dans sys.path
          • Partager sur Facebook
          • Partager sur Twitter
            18 janvier 2019 à 11:06:21

            Bon, je vais détailler pour être plus clair !!

            l'arborescence des mes fichiers:

            lestests/ (dossier ou je fais des essais pour comprendre les tests )
            
                lafonction/ (dossier où je mets des fonctions que je veux tester par la suite)
            
                    math_funct.py ( une fonction à tester )
            
                test_essai/ (dossier contenant les fichiers de test)
            
                    test_math_funct.py ( teste la fonction math_funct )

            math_funct.py ( des trucs simples  à tester )

            def add(x, y=2):
                return x + y
            
            
            def product(x, y=2):
                return x * y

            test_math_funct.py 

            from lestests.lafonction import math_funct
            
            
            def test_add():
                assert math_funct.add(7, 3) == 10
                assert math_funct.add(7) == 9
                assert math_funct.add(5) == 7
            
            
            def test_product():
                assert math_funct.product(7, 3) == 21
                assert math_funct.product(7) == 14
                assert math_funct.product(5) == 10


            Je me mets dans terminal à la racine et je fais py.test, résultats:

            Traceback:
            test_essai/test_math_funct.py:1: in <module>
                from lestests.lafonction import math_funct
            E   ModuleNotFoundError: No module named 'lestests'

            il manque forcément quelque chose pour que ça marche d'où mes questions:

            - mon import est-il correct ? ( sachant que je suis sur Pycharm et qu'il ne m'indique aucune erreur...)

            - un __init__.py et Setup quelque part ?

            - une arborescence différente ?

            - il manque des lignes dans mon code ?

            - mon import incorrect, l'absence de __init__.py, et une mauvaise arborescence ? ( je n'aurais vraiment rien compris ? )

            Si je peux avoir quelques pistes...

            Merci pour vos réponses

            Laurent

            -
            Edité par LaurentG37 18 janvier 2019 à 11:07:12

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              18 janvier 2019 à 11:51:07

              Je reformule : « Le paquet à tester et le paquet de testes ne devrait pas être l'un dans l'autre, mais séparés car ils sont 2 paquets différents. »

              Tel que :

              project\
                  package/
                      __init__. py
                      module.py
                  tests/
                      __init__.py
                      module.py
                  setup.py
              

              Dans le setup tu ajoutes l'argument setup_suite="tests" (voir la doc de setuptools et distutils si besoin) et ensuite avec le terminal, dans le dossier project, tu lances la commande python setup.py test (remplaces python par celui que tu veux, par exemple pour Python 3.7, ça peut être python3.7 sur Unix ou py -3.7 sur Windows).

              -
              Edité par Anonyme 18 janvier 2019 à 11:52:16

              • Partager sur Facebook
              • Partager sur Twitter
                18 janvier 2019 à 12:33:23

                J'ai un projet ( = lestests )

                deux dossiers à l'intérieur:

                lafonction ( contient tout ce que je veux tester )

                test_essai ( contient les tests du projet )

                Donc le paquet à tester et le paquet de tests ne sont pas l'un dans l'autre ...en tout cas pour moi !

                dans le terminal , un fois dans le dossier lestests, je lance la commande pytest et il teste ...

                Voilà ce que je voudrais ! comment fait-on pour que ça marche ?

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  18 janvier 2019 à 14:24:52

                  Alors ce n'est pas from project import package mais from package import module que tu dois mettre dans tes tests, car project n'est pas un paquet Python, c'est simplement le dossier du projet dans lequel doit se trouver les paquets Python, les tests, la docs, les fichiers/scripts de contructions et d'installations, etc.

                  -
                  Edité par Anonyme 18 janvier 2019 à 14:25:12

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 janvier 2019 à 14:57:27

                    je crois que mon problème est plus simple: commençons par le début !!

                    si je fait un :

                    print(math_funct.add(3, 45))

                    à la fin dans math_funct.py

                    je rajoute un fichier __init__.py dans le dossier lafonction

                    puis dans terminal dossier test_essai, je fais

                    python test_math_funct.py

                    je n'arrive pas à afficher 48 !!!

                    et si je prends une autre arborescence:

                    lestest/

                        lafonction/

                            math_funct.py

                        test_math_funct.py 

                    je n'ai plus le dossier test_essai mais seulement le fichier test_math_funct.py

                    avec l'import suivant dans mon test_math_funct

                    from lafonction import math_funct
                    

                    j'obtiens bien 48: le problème viens de mon import ...

                    alors comment obtenir le même résultat si j'enveloppe le fichier test_math_function dans le dossier test_essai ???

                    Peut-être qui si j'arrive déjà à faire ça pytest fonctionnera .

                    Laurent.

                    -
                    Edité par LaurentG37 18 janvier 2019 à 15:01:18

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      18 janvier 2019 à 16:12:37

                      Est-ce que tu lis les réponses que l'on te donne ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 janvier 2019 à 16:33:30

                        Oui, désolé mais je crois que j'écrivais pendant ta réponse ...

                        from lafonction import math_funct

                        c'est la bonne formule !!!

                        Mais si j'enveloppe test_math_funct dans un dossier ??

                        j'ai essayé

                        from .lafonction import math_funct

                        pour remonter jusqu'au dossier parent, mais ça ne marche pas...

                        • Partager sur Facebook
                        • Partager sur Twitter

                        pytest: tests dans un dossier

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown