2017-07-08 2 views
-3

je suis très nouveau à python mock et si juste essayer de comprendre la même chose. Dans le code ci-dessous, quelle est la différence entre 1 et 2 déclarations indiquées ci-dessous, car à la fin, je peux configurer mock_response.status_code avec ou l'autre des déclarationspython mock ce qui est return_value dans le suivant

import requests 

    def get_data(): 
     response = requests.get('https://www.somesite.com') 
     return response.status_code 

    if __name__ == '__main__': 
     print get_data() 

Maintenant, quelle est la différence entre les codes suivants,

from call import get_data 
    import unittest 
    from mock import Mock,patch 
    import requests 

    class TestCall(unittest.TestCase): 
     def test_get_data(self): 
      with patch.object(requests,'get') as get_mock: 
       1.get_mock.return_value = mock_response = Mock() 
        # OR 
       2.mock_response = get_mock.return_value 
       mock_response.status_code = 200 
       assert get_data() == 200 

    unittest.main() 

Répondre

0

en regardant le docs:

return_value: la valeur renvoyée lorsque la maquette est appelée. Par défaut, il s'agit d'un nouveau Mock (créé lors du premier accès). Voir l'attribut return_value.

Vous moquez la fonction get du module requests. La méthode get est censée renvoyer un objet response que vous revendiquez par la suite status_code. Par conséquent, vous dites à la fonction get simulacre de retourner un simulacre response. Selon les docs, return_value renvoie par défaut un objet Mock, donc il ne devrait y avoir aucune différence entre 1 et 2 sauf que 1 crée explicitement un Mock et 2 utilise le comportement par défaut.

En remarque, ce test d'unité ne teste rien parce que vous avez défini le status_code sur l'objet Mock, puis l'avez affirmé. C'est comme:

status_code = 200 
assert status_code == 200