Comment charger des luminaires qu'une seule fois dans django tests unitaires ?
Dans les tests unitaires j'ai besoin de charger les montages, comme ci-dessous:
class TestQuestionBankViews(TestCase):
# Load fixtures
fixtures = ['qbank']
def setUp(self):
login = self.client.login(email="[email protected]",password="welcome")
def test_starting_an_exam_view(self):
candidate = Candidate.objects.get(email="[email protected]")
.......etc
def test_review_view(self):
self.assertTrue(True)
.........
def test_review_view2(self):
self.assertTrue(True)
.........
Problème:
Ces appareils sont en cours de chargement pour chaque test, c'est à dire avant test_review_view, test_review_view2, etc., comme Django bouffées de chaleur de la base de données après chaque test.
Ce comportement est à l'origine de tests pour prendre une longue période de temps.
Comment puis-je éviter cette redondance gabarit de chargement?
Est-il un moyen de charger des appareils dans setUp
et de les éliminer lors de la classe de test est terminée, au lieu de rinçage entre chaque test?
- oh......... je pense que je peux résoudre ce problème en utilisant intial_data luminaire, héritage de la "unittest.Cas de test" au lieu de "tester.Cas de test"? Toutes les autres pensées?
Vous devez vous connecter pour publier un commentaire.
À l'aide de django-nez et un peu de code, vous pouvez faire exactement ce que vous avez demandé. Avec django-nez, vous pouvez avoir par colis, par module et par classe d'installation et de démontage des fonctions. Qui vous permet de charger vos appareils dans l'un des plus des fonctions de configuration et de désactiver le django.test.Cas de test de réinitialisation de ces accessoires, entre les tests.
Voici un exemple de fichier de test:
Avis que l'installation et le démontage sont à l'extérieur de la classe. Le programme d'installation va être exécuté avant que toutes les classes de test dans ce fichier, et le démontage sera exécuté après toutes les classes de test.
À l'intérieur de la classe, vous remarquerez que les def _fixture_setup(auto) méthode. Ceci remplace la fonction réinitialise la base de données entre chaque test.
Gardez à l'esprit que si vos tests écrire quoi que ce soit à la base de données, ce qui pourrait invalider votre tests. Si tous les autres tests qui ont besoin de luminaires reloaded pour chaque essai doit être mis dans un autre fichier de test.
Ou de l'utilisation setUpModule:
imprime:
Si vous ne vous sentez pas comme l'installation d'un nouveau paquet juste pour cela, vous pouvez combiner Tom Wainwright de la solution et mhost de la solution.
Dans votre testfile, ajouter ces fonctions en dehors de toutes les classes:
Si vous ne voulez pas avoir ces appareils chargés dans la base de données pour tous les cas de test, diviser le test en plusieurs fichiers par la création d'un nouveau répertoire dans le répertoire de l'application appelée
tests
, ajouter un vide__init__.py
fichier de dire à Python que c'est un package, et d'ajouter vos fichiers de test avec les noms de fichiers qui commencent partest
, depuis le coureur va chercher les fichiers correspondant au motiftest*.py
Pour ce que ça vaut, et depuis il n'y a pas de réponse, Django 1.8 maintenant fournit cette fonctionnalité de la boîte - à condition que vous êtes en utilisant une base de données client qui prend en charge les transactions.
Il ajoute également le cas de test.setUpTestData() la méthode la création manuelle de données de test une fois par cas de test de la classe.
Voir le Django de 1,8 notes de version.
J'ai couru dans le même problème. En général, il n'y a pas une très bonne façon de le faire à l'aide de django reinhardt, de test runner. Vous pourriez être intéressé par ce fil
Avec cela étant dit, si tous les cas de tests d'utiliser le même montage, et ils n'ont pas de modifier les données d'une façon quelconque, à l'aide de initial_data serait de travailler.
J'ai eu un problème similaire une fois et fini par écrire mon propre test runner. Dans mon cas,
initial_data
n'était pas le bon endroit commeinitial_data
serait chargé au cours desyncdb
, quelque chose que je ne voulais pas. J'ai remplacésetup_
etteardown_test_environment
méthodes pour charger mon dispositif personnalisé avant de la suite de test a été exécuté et l'enlever une fois fait.django-nez offre une solution toute faite à ce problème: il suffit de la sous-classe
django_nose.FastFixtureTestCase
.En outre, django-nez prend en charge luminaire regroupement, ce qui peut accélérer l'exécution de vos tests encore plus que par le chargement de chaque ensemble unique de luminaires une fois par essai. Après avoir sous-classé
FastFixtureTestCase
le cas échéant, exécuter la django-nez lanceur de test à l'aide de la--with-fixture-bundling
option.Voir django-nez sur pypi pour plus d'informations.