50 votes

Comment lancer des tests pour l'application réutilisable django?

Puis-je lancer des tests pour mon réutilisables Django app sans intégration de cette application dans un projet?

Mon application utilise certains modèles, il est nécessaire de prévoir (TEST_)DATABASE_* paramètres. Où dois-je conserver et comment dois-je lancer les tests?

Pour un projet Django, je peux exécuter des tests avec manage.py test; lorsque j'utilise django-admin.py test avec mon application autonome, j'obtiens:

Erreur: les Paramètres ne peuvent pas être importés, parce que la variable d'environnement DJANGO_SETTINGS_MODULE est pas défini.

Quelles sont les meilleures pratiques ici?

45voto

berni Points 1247

Django a changé de structure depuis la publication de la réponse sélectionnée. La bonne utilisation de Django (> = 1.4) test runner est la suivante:

 import os, sys
from django.conf import settings

settings.configure(DEBUG=True,
               DATABASES={
                    'default': {
                        'ENGINE': 'django.db.backends.sqlite3',
                    }
                },
               ROOT_URLCONF='myapp.urls',
               INSTALLED_APPS=('django.contrib.auth',
                              'django.contrib.contenttypes',
                              'django.contrib.sessions',
                              'django.contrib.admin',
                              'myapp',))

from django.test.simple import DjangoTestSuiteRunner
test_runner = DjangoTestSuiteRunner(verbosity=1)
failures = test_runner.run_tests(['myapp', ])
if failures:
    sys.exit(failures)
 

Pour plus d'informations, vous pouvez consulter la documentation DjangoTestSuiteRunner .

20voto

Lukasz Dziedzia Points 4134

J'ai terminé avec une telle solution (inspirée de la solution trouvée dans le vote django):

Créer un fichier, par exemple. 'runtests.py' dans le répertoire tests contenant:

 import os, sys
from django.conf import settings

DIRNAME = os.path.dirname(__file__)
settings.configure(DEBUG = True,
                   DATABASE_ENGINE = 'sqlite3',
                   DATABASE_NAME = os.path.join(DIRNAME, 'database.db'),
                   INSTALLED_APPS = ('django.contrib.auth',
                                     'django.contrib.contenttypes',
                                     'django.contrib.sessions',
                                     'django.contrib.admin',
                                     'myapp',
                                     'myapp.tests',))


from django.test.simple import run_tests

failures = run_tests(['myapp',], verbosity=1)
if failures:
    sys.exit(failures)
 

Il permet d'exécuter des tests avec la commande python runtests.py . Il ne nécessite pas de dépendances installées (par exemple, buildout) et n'affecte pas les tests exécutés lorsque l'application est incorporée dans un projet plus important.

5voto

Dominik Szopa Points 1164

Pour ma réutilisables application(django-modération) j'utilise buildout. Je crée example_project,- je l'utiliser avec buildout pour exécuter des tests sur elle. J'ai simplement mis mon application à l'intérieur des paramètres de l' example_project.

Lorsque je veux installer toutes les dépendances utilisées par mon projet et l'exécution des tests, j'ai seulement besoin de prendre les mesures suivantes:

  • Exécuter: python bootstrap.py
  • Exécuter buildout:

    bin/buildout

  • Exécution de tests de Django 1.1 et Django 1.2:

    bin/test-1.1 bin/test-1.2

Ici vous pouvez trouver tutoriel comment configurer réutilisables application pour utiliser buildout pour le déploiement et l'exécution des tests: http://jacobian.org/writing/django-apps-with-buildout/

Vous trouverez ici de l'exemple de buildout config que j'utilise dans mon projet:

http://github.com/dominno/django-moderation/blob/master//buildout.cfg

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