2017-05-31 1 views
0

Je suis novice dans l'écriture de tests unitaires, cette question est peut-être bête mais je la publie après de nombreuses recherches. J'essaye d'écrire un test unitaire pour une fonction dans le fichier/views.py centralisé qui est utilisé dans beaucoup d'autres vues.Fonction moqueuse dans une vue - Django

La fonction ressemble à ceci

def make_job(self, request, *args, **kwargs): 
    ..... 
    ..... 
    return Response(data, status=status.HTTP_200_OK) 

je besoin d'aide pour se moquant de la demande dans le test unitaire, étant donné que cette fonction est appelée par d'autres points de vue, je ne suis pas sûr de savoir comment tester cette fonction indépendamment sans compter sur le chemin de l'URL.

Quelle est l'approche pour se moquer de cette demande?

Merci

Répondre

0

Vous pouvez utiliser mock.patch comme décorateur de fonction, ou encore mieux comme ContextManager:

with mock.patch('path.to.your.app.Class.method', new=new_function_with_return): 
    # do something here 
    pass 

https://docs.python.org/3/library/unittest.mock.html#patch

[modifier] désolé, je lisais un peu trop vite. Vous pouvez créer des objets de demande faux via le RequestFactory de Django:

https://docs.djangoproject.com/en/1.11/topics/testing/advanced/#the-request-factory

+0

Salut @odi - Merci pour votre réponse, je l'ai essayé usine de demande, mais qui nécessite le chemin de l'URL et depuis plusieurs vues utilise cette fonction que je suis Je ne sais pas quelle URL de requête doit être utilisée. Donc, je me demandais s'il y avait un moyen de tester indépendamment – HitRefresh

+0

, en testant theorie, vous devriez tester tous les chemins d'url pour atteindre 100% de couverture et de convergences;) Avoir seulement des tests d'intégration pour certaines fonctions n'est pas idéal, mais parfois le seul moyen économique d'obtenir une couverture décente. Parlant de l'expérience: avoir quelques tests d'intégration dans une grande base de code hérité est d'un ordre de grandeur d'un couple plus élevé sur l'échelle fou-à-sain d'esprit. – ACimander