J'ai un code Django qui interagit avec les objets de requête ou les objets utilisateur. Par exemple, quelque chose comme:
foo_model_instance = models.get_or_create_foo_from_user(request.user)
Si vous deviez tester avec le Django python Shell ou dans un unittest, que feriez-vous ici? Ici, simplement un objet User fera l'affaire, mais le besoin d'un objet de requête factice revient également fréquemment.
Pour le Shell ou pour les unités:
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.contrib.auth.models.User comme l'a suggéré @ozan et peut-être avec Factory Boy pour la vitesse (avec Factory Boy, vous pouvez choisir de ne pas enregistrer dans la base de données)
Comment vous moquez-vous des utilisateurs?
Initialisez un Django.contrib.auth.models.User
objet. User.objects.create_user
rend cela facile.
Comment vous moquez-vous des demandes?
Initialisez un Django.http.HttpRequest
objet.
Bien sûr, il existe des raccourcis en fonction de ce que vous voulez faire. Si vous avez juste besoin d'un objet avec un attribut user
qui pointe vers un utilisateur, créez simplement quelque chose (n'importe quoi) et donnez-lui cet attribut.
Vous pouvez soit rouler vos propres moqueries, comme l'a suggéré Anurag Uniyal, soit utiliser un framework de moquerie.
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 point du test unitaire. Un test unitaire ne devrait pas toucher la base de données, mais en créant un utilisateur, vous avez changé la base de données, d'où la raison pour laquelle nous voudrions en simuler un.
En savoir plus sur les faux objets ici
http://en.wikipedia.org/wiki/Mock_object
http://www.mockobjects.com/
Et utilisez cette bibliothèque python pour se moquer d'un utilisateur
http://python-mock.sourceforge.net/
sinon vous pouvez écrire vous-même une classe utilisateur simple, utilisez-la comme point de départ
class MockUser(object):
def __call__(self, *args, **kwargs):
return self
def __getattr__(Self, name):
return self
ajouter des cas spécifiques etc etc
Vous n'avez pas besoin de vous moquer des utilisateurs, car vous pouvez simplement en créer un dans votre test - la base de données est détruite une fois le test terminé.
Pour se moquer des demandes, utilisez cet extrait de Simon Willison.