Comment simuler les utilisateurs et les requêtes dans django

J’ai un code django qui interagit avec les objects de requête ou les objects utilisateur. Par exemple, quelque chose comme:

foo_model_instance = models.get_or_create_foo_from_user(request.user) 

Si vous deviez tester avec le shell de django python ou dans un unittest, que passeriez-vous là? Ici simplement, un object User fera l’affaire, mais la nécessité d’un object de demande de simulation apparaît également fréquemment.

Pour le coquillage ou pour les démunis:

  • Comment simulez-vous les utilisateurs?
  • Comment vous simulez les demandes?

Pour la demande, j’utiliserais RequestFactory inclus avec Django.

 from django.test.client import RequestFactory rf = RequestFactory() get_request = rf.get('/hello/') post_request = rf.post('/submit/', {'foo': 'bar'}) 

pour les utilisateurs, j’utiliserais django.consortingb.auth.models.User comme suggéré par @ozan et peut-être avec Factory Boy pour la vitesse (avec l’usine, vous pouvez choisir de ne pas enregistrer dans la firebase database)

Comment simulez-vous les utilisateurs?

Initialise un object django.consortingb.auth.models.User . User.objects.create_user rend cela facile.

Comment vous simulez les demandes?

Initialise un object django.http.HttpRequest .

Bien sûr, il existe des raccourcis en fonction de ce que vous voulez faire. Si vous avez juste besoin d’un object avec un atsortingbut user qui pointe vers un utilisateur, créez simplement quelque chose (n’importe quoi) et donnez-lui cet atsortingbut.

Vous pouvez soit rouler vos propres moqueries, comme l’a suggéré Anurag Uniyal, soit utiliser un cadre moqueur.

En réponse à ceux qui disent que vous pouvez simplement créer un utilisateur ordinaire comme vous le feriez de toute façon dans Django … Je dirais que cela va à l’encontre du but du test unitaire. Un test unitaire ne doit pas toucher à la firebase database, mais en créant un utilisateur, vous avez modifié la firebase database, d’où notre souhait de vous en moquer.

Lisez sur les objects fantaisie ici
http://en.wikipedia.org/wiki/Mock_object
http://www.mockobjects.com/

Et utilisez cette lib python pour simuler un utilisateur
http://python-mock.sourceforge.net/

Sinon, vous pouvez écrire vous-même une classe utilisateur simple, utilisez-la comme sharepoint départ

 class MockUser(object): def __call__(self, *args, **kwargs): return self def __getattr__(Self, name): return self 

append des cas particuliers etc etc

Vous n’avez pas besoin de vous moquer des utilisateurs, car vous pouvez simplement en créer un dans votre test – la firebase database est détruite une fois le test terminé.

Pour simuler des demandes, utilisez cet extrait de Simon Willison.