2017-09-29 1 views
0

ici le code pour se moquer seulement un certain type d'urldemandes de python en utilisant la maquette magique, comment appeler la méthode originale sous certaines conditions

def mocked_requests_patch(*args, **kwargs): 
    url = args[0] 
    if url.find('additional_address') != -1: 
     return 'mocked response' 

    return requests.patch(*args, **kwargs) 

requests.patch = MagicMock(side_effect=mocked_requests_patch) 

mais bien sûr, je reçois un maximum recursion depth exceeded while calling a Python object

scie certaines questions comme celle-ci, mais n'a trouvé aucune utilisation MagicMock

+1

pourquoi ne pas premier magasin '' requests.patch' comme original_patch = requests.patch'? – Sraw

+0

travaillé. @Sraw écrire comme une réponse et je vais accepter. Merci. – WebQube

Répondre

2

Vous ne pouvez pas trouver une question explicite pour cela, car il est relativement simple de sauvegarder votre propre référence à une méthode moqueuse avant d'installer un simulacre patcher est utilisé pour gérer l'installation et la désinstallation du simulacre de manière systématique via start() et stop().

Dans ce cas particulier puisque vous vous moquez de requests.patch, vous pouvez envisager d'utiliser le package requests_mock car il fournit un mécanisme permettant d'envoyer des requêtes à la méthode http réelle. En fait, vous pouvez voir en examinant la source comment son start()saves a reference à la fonction d'envoi qui est later restored par stop()