Résolue

Pytest et fixtures : se faire une factory ou non

# Django # Tests unitaires

Gabriel Trouvé

Mentor

Re ! :)

En discutant avec un dev django, il a regardé mes tests.

En fait ce genre de fixture permet plus de flexibilité, car ça permet de créer des utilisateurs dans les tests.

# conftest et dans les tests il créé avec sa factory
@pytest.fixture
def create_user(db, django_user_model, test_password):
   def make_user(**kwargs):
       kwargs['password'] = test_password
       if 'username' not in kwargs:
           kwargs['username'] = str(uuid.uuid4())
       return django_user_model.objects.create_user(**kwargs)
   return make_user

Ce que fait le dev django (en gros pour simplifier) :

# conftest
@pytest.fixture
def user1():
    return CustomUser.objects.create_user("user1", "[email protected]", "u1", "u1", "12345678")
# test
@pytest.mark.django_db
def test_user1(user1):
    print(user1.username)
    assert user1.username == "user1"

Du coup je fais comme cette dernière méthode. Car je n'ai pas besoin de créer beaucoup d'utilisateurs. Et ça me convient bien car je n'ai pas à les re créer dans les tests. Autant avoir les utilisateur de créés directement dans les fixtures je pense ici.

Mais le mieux c'est quoi ? Il y a une bonne pratique ?

Merci d'avance

Salut Gab !

Il n'y a pas vraiment de "meilleure" pratique, ça dépend beaucoup du contexte.

J'aurais tendance à privilégier la deuxième option, plus simple, et la seconde, si tu en ressent le besoin. C'est un peu le même débat que celui qu'on peut avoir sur les framework ^^ Pas besoin d'utiliser React si tu veux faire un site avec juste une landing page.

Commence simple, et ajuste au fur et à mesure si besoin ;)

Gabriel Trouvé

Mentor

Je pense que j'ai commencé direct avec des choses très spécifiques lol.

Du coup là je suis en train de lire le livre dont je t'avais parlé sur pytest (sans django) pour découvrir les concepts de base.

D'ici la fin de semaine je l'aurais terminé et je recommence mes tests sur mon projet de forum avec pytest.

Merci Thibault !

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.