# Mocking de una función en tests de Python

By [Marco Richetta](https://paragraph.com/@marco-richetta) · 2021-11-02

---

### Recursos

*   [https://realpython.com/python-mock-library/](https://realpython.com/python-mock-library/#conclusion)
    
*   [https://gist.github.com/evansde77/45467f5a7af84d2a2d34f3fcb357449c](https://gist.github.com/evansde77/45467f5a7af84d2a2d34f3fcb357449c)
    
*   [https://aaronlelevier.github.io/python-unit-testing-with-magicmock/](https://aaronlelevier.github.io/python-unit-testing-with-magicmock/)
    

Suponiendo que existe una función `get_github_profile` en `services.py`

    import requests
    
    def get_github_profile(user_id: int):
        """ Obtener datos de un usuario de Github """
    
        headers = {"accept": "application/vnd.github.v3+json"}
    
        response = requests.get(f"https://api.github.com/users/{user_id}", headers=headers)
    
        user = response.json()
    
        return user["name"]
    

Si hacemos un test que ejecute 100 veces esta función, encontraremos 2 problemas:

*   Las requests HTTP a una API externa son **lentas.**
    
*   Posiblemente alcancemos un límite de requests muy rápidamente.
    

En estos casos podemos _mockear_ esa request a la API externa.

    def test_get_github_profile(self):
    
        with patch('requests.get') as mock_request:
    
            # A partir de acá `requests.get` es nuestro mock y podemos
            # modificar su comportamiento como queramos
    
            # Set del valor que va a devolver nuestra request "fake"
            mock_request.return_value = {"user_id": 150, "name": "Katie"}
    
            result = get_github_profile(user_id=150)
    
            assert result == "Katie"

---

*Originally published on [Marco Richetta](https://paragraph.com/@marco-richetta/mocking-de-una-funci-n-en-tests-de-python)*
