106 votes

Le programme de test de Django ne trouve pas les tests

Je suis novice en Python et Django et j'apprends en créant un site de gestion de régime, mais j'ai été complètement vaincu par l'exécution de mes tests unitaires. Tous les documents et blogs que j'ai trouvés disent que tant que le fichier tests.py est accessible, que tests.py est dans le même dossier que models.py et que votre classe de test sous-classe TestCase, tout devrait être pris en charge automatiquement. Cela ne fonctionne pas pour moi, quand je lance manage.py test <myapp> il ne trouve aucun test.

J'ai commencé avec tous mes tests dans leur propre paquetage, mais j'ai simplifié les choses pour que tous les tests se trouvent dans mon fichier tests.py. Le fichier tests.py actuel ressemble à ceci

import unittest
from pyDietTracker.models import Weight
from pyDietTracker.weight.DisplayDataAdapters import DisplayWeight

class TestDisplayWeight(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def testGetWeightInStone_KG_Correctly_Converted(self):
        weight = Weight()
        weight.weight = 99.8

        testAdapter = DisplayWeight(weight)
        self.assertEquals(testAdapter.GetWeightInStone(), '15 st 10 lb')   

J'ai également essayé de sous-classer la classe TestCase de Django, mais cela n'a pas fonctionné non plus. J'utilise Django 1.1.1, Python 2.6 et Snow Leopard.

Je suis sûr qu'il me manque quelque chose de très élémentaire et d'évident, mais je n'arrive pas à savoir quoi. Des idées ?

Edit : Juste une mise à jour rapide après un commentaire

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'pyDietTracker',
 )

Pour que les tests s'exécutent, je lance manage.py test pyDietTracker

225voto

Eduardo Points 10141

J'ai eu le même problème, mais la cause première était différente.

J'étais en train d'obtenir Ran 0 tests en tant qu'OP.

Mais il s'avère que le les méthodes de test dans votre classe de test doivent commencer par le mot-clé test pour courir .

Exemple :

from django.test import TestCase

class FooTest(TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def this_wont_run(self):
        print 'Fail'

    def test_this_will(self):
        print 'Win'

De même, les fichiers contenant vos TestCases doivent commencer par test .

144voto

David Lam Points 1176

Si vous utilisez un yourapp/tests pour les unittests, s'assurer qu'il y a bien un __init__.py dans votre tests (puisque c'est ce qui en fait un module Python !).

45voto

codingrhythm Points 655

Je peux effectuer des tests pour des applications spécifiques, par exemple

python project/manage.py test app_name

mais quand je cours

python project/manage.py test

0 tests ont été trouvés

Je me suis rendu compte que je devais l'exécuter dans le même répertoire que manage.py

La solution serait donc de se rendre dans le répertoire du projet et d'exécuter

python manage.py test

25voto

Thijs Points 371

Dans mon cas, il manquait dans le dossier de l'application un élément __init__.py . Il en résulte que le test sera exécuté avec python manage.py test project.app_name mais pas avec python manage.py test .

project/
  app_name/
    __init__.py   # this was missing

17voto

Flimm Points 8870

Dans mon cas, j'ai tapé def au lieu de class . Au lieu de

class TestDisplayWeight(TestCase): # correct!

J'avais

def TestDisplayWeight(TestCase): # wrong!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X