2017-10-17 8 views
0

application Mon Flask est à l'aide uwsgi spooler donc je import uwsgi dans le project.But quand je lance mes affaires de tests unitaires, puisProjet python import uwsgi comment faire un test unitaire?

Traceback (most recent call last): 
    File "runapp.py", line 55, in <module> 
    import topicservice 
    File "/home/workspace/topic.py", line 36, in <module> 
    import uwsgi 
ImportError: No module named uwsgi 

Je sais uwsgi est pas un module python, il est une course d'application serveur.Le binaire par uwsgi peut accéder au module "uwsgi". Mais y a-t-il un moyen de tester mon unité?

Répondre

1

J'ai rencontré le même problème en rencontrant la fonction RPC utilisée dans un projet. Il n'y a pas de solution officielle, mais je peux partager ma solution.

Vous devez extraire la fonctionnalité souhaitée dans une classe/fonction distincte qui charge le module uwsgi. Exemple pour uwsgi.rpc:

class RPCSender: 

def __init__(self, host_address): 
    self._host_address = host_address 

def send(self, destination, data): 
    import uwsgi 

    uwsgi.rpc(self._host_address, destination, data) 

... 

local_rpc_sender = RPCSender('192.168.173.100:3031') 
local_rpc_sender.send('myfunc', 'myarg') 

Maintenant, quand vous écrivez des tests pour les modules qui utilisent RPCSender, vous devez se moquer de la méthode send. De préférence en utilisant mock.patch.object. Ce n'est pas contre les règles de tests unitaires puisqu'il est inutile de tester uwsgi.rpc - c'est une bibliothèque tierce dont les tests ne sont pas de notre responsabilité - nous supposons que cela fonctionne comme prévu.