[PYTHON] Épingler la valeur de départ factory_boy dans Django

Conclusion

Créez une classe personnalisée qui hérite de TestCase et définissez la valeur de départ dans setUp (). Chaque application hérite d'une classe personnalisée et écrit un test.

Contexte

Je voulais assurer la reproductibilité des tests lors de l'utilisation de factory_boy avec Django.

procédure

environnement

factory-boy==2.12.0

Définition de la classe BaseTestCase

Définissez une classe BaseTestCase qui corrige la valeur de départ. J'écris une application base et j'y écris des classes abstraites.

python:./base/tests.py


from django.test import TestCase
import factory.random


class BaseTestCase(TestCase):
    def setUp(self):
        factory.random.reseed_random(0)
        return super().setUp()

Héritage de classes individuelles TestCase

Héritez de la classe BaseTestCase et définissez chaque cas de test.

python:./user/tests.py


from base.tests import BaseTestCase

from .models import User
from .factories import UserFactory


class UserTestCase(BaseTestCase):
    def test_create_user(self):
        user = UserFactory()
        actual_user = User.objects.get(pk=user.pk)
        self.assertEqual(user, actual_user)

Bien sûr, lors de la définition de setUp (), appelez également la méthode de la classe parent.

python:./user/tests.py


class UserTestCase(BaseTestCase):
    def setUp(self):
        super().setUp()
        print("initialize")

    def test_create_user(self):
        user = UserFactory()
        actual_user = User.objects.get(pk=user.pk)
        self.assertEqual(user, actual_user)

Résumé

En fixant la valeur de départ, le test peut être exécuté avec la reproductibilité garantie. Cet article est basé sur Django, mais il devrait être valable non seulement pour Django.

Recommended Posts

Épingler la valeur de départ factory_boy dans Django
Modèle dans Django
Formulaire à Django
Modifications du modèle dans Django
Optimisation des performances dans Django 3.xx
PHP comme var_dump dans le template Django
Gérer les constantes dans les modèles Django
Implémenter la fonction de suivi dans Django
Renommer les colonnes de table dans Django3
Calcul de la valeur de jeu de cisaillement en Python
Sortie de la structure de table dans Django
Afficher Django ManyToManyField dans un modèle