Valor de retorno simulado basado en la entrada en Python

Abid Ullah 21 junio 2023
  1. Valor de retorno simulado basado en la entrada en Python
  2. Usos de Mocking en Python
  3. Usar objetos simulados en Python
  4. El significado de burlarse en Python
  5. Escriba un simulacro que devuelva diferentes valores según la entrada
  6. Simulacro de Python que devuelve según la entrada
Valor de retorno simulado basado en la entrada en Python

Este artículo demostrará cómo crear una función simulada que devuelva diferentes valores según la entrada en Python. También le mostraremos cómo probar nuestra función simulada.

Finalmente, le mostraremos algunas técnicas más avanzadas para simular funciones. No necesita saber sobre programación o pruebas para seguir.

Valor de retorno simulado basado en la entrada en Python

Python es un lenguaje increíblemente poderoso con un rico ecosistema de herramientas de prueba. Tiene muchas características que lo hacen perfecto para pruebas unitarias.

Una herramienta popular es el módulo mock, que nos permite reemplazar partes de nuestro sistema con objetos simulados y afirmar cómo se usaron.

Las funciones de simulación nos permiten reemplazar la funcionalidad de una función con nuestro código. Esto puede ser útil cuando queremos probar el comportamiento de nuestro código cuando una función no está disponible o cuando queremos probar cómo reacciona nuestro código a diferentes entradas.

Usos de Mocking en Python

La simulación es una técnica poderosa que se puede utilizar para mejorar la confiabilidad y la eficiencia de nuestras pruebas. Este artículo nos enseñará cómo usar objetos simulados en nuestras pruebas de Python.

  1. La simulación nos permite reemplazar objetos reales con versiones simuladas. Esto puede ser útil cuando queremos probar un componente que depende de otro componente que aún no está disponible.

    Por ejemplo, podríamos querer probar una conexión de base de datos sin conectarnos realmente a una base de datos.

  2. La burla también se puede usar para eliminar dependencias externas. Esto puede ser útil cuando queremos evitar hacer llamadas de red o interactuar con bases de datos durante nuestras pruebas.

  3. La simulación se puede utilizar para mejorar la eficiencia de nuestras pruebas. Cuando nos burlamos de un objeto, podemos evitar la sobrecarga de instanciar el objeto real.

    Esto puede ser particularmente útil cuando se prueba código que instancia muchos objetos.

  4. La simulación también se puede utilizar para hacer que nuestras pruebas sean más confiables. Eliminar las dependencias externas puede evitar pruebas inestables que dependen de la disponibilidad de la red o la base de datos.

Usar objetos simulados en Python

Para usar objetos simulados en nuestras pruebas, primero debemos crear una clase Mock. Esta clase se puede usar para crear objetos simulados que se ven y se comportan como los reales.

Una vez que tenemos una clase Mock, podemos instanciar objetos simulados y usarlos en nuestras pruebas. Los objetos simulados tienen todos los mismos métodos que los objetos reales que están reemplazando, por lo que podemos usarlos como lo haríamos con los objetos reales.

Cuando terminamos de usar un objeto simulado, podemos afirmar que se usó correctamente. Por ejemplo, podemos afirmar que se utilizó una conexión de base de datos simulada para ejecutar una consulta.

Por lo tanto, la simulación es una herramienta poderosa que se puede usar para mejorar la confiabilidad y la eficiencia de nuestras pruebas de Python.

Al reemplazar objetos reales con objetos simulados, podemos evitar la sobrecarga de instanciar el objeto real. También podemos eliminar dependencias externas para que nuestras pruebas sean más confiables.

El significado de burlarse en Python

La palabra burla se usa en varios contextos; sin embargo, la siguiente definición se utilizará a lo largo de este documento:

“El proceso de sustituir llamadas u objetos falsos por una o más llamadas a funciones u objetos reales”.

Una llamada a una función simulada entrega un valor instantáneo que se ha preestablecido sin trabajo real. Las características y los métodos de un objeto falso se definen de la misma manera completamente dentro de la prueba sin generar primero el objeto real ni realizar ningún otro trabajo.

Cuando se trata de pruebas, el hecho de que la persona que escribió la prueba pueda definir los valores de retorno de la llamada a la función les da un poder tremendo. Sin embargo, también significa que la persona que escribe la prueba debe hacer un trabajo fundamental para configurar todo con precisión.

El módulo unittest.mock en Python es el responsable de burlarse en el lenguaje de programación. La función patch, que actúa como decorador y administrador de contexto, y la clase MagicMock, son dos clases y funciones esenciales en este módulo.

También incluye otras clases y métodos útiles. La mayor parte del trabajo involucrado en burlarse de Python se puede realizar utilizando estos dos componentes robustos.

Escriba un simulacro que devuelva diferentes valores según la entrada

Ahora que conocemos bien el simulacro y sus funcionalidades. Entendamos mejor el simulacro con ejemplos de codificación.

Para crear la función, usaremos *args y **kwargs porque estos parámetros toman argumentos simples y de palabras clave. Por lo tanto, podemos pasar cualquier tipo de datos: cadena, entero, flotante y booleano, y también podemos asignar valores a argumentos de palabras clave.

  • Crea una función.
  • Pase los argumentos *args y el argumento de palabra clave **kwargs
  • Devuelve una tupla que tiene *args y **kwargs
  • Llamar a la función
  • Imprime el resultado

Mire el código a continuación para una mejor comprensión.

def mock_function(*args, **kwargs):
    return (args, kwargs)


mock_function("x", "y")
(("x", "y"), {})
mock_function("x", y=2, z="mock test")

Producción :

(('x',), {'y': 2, 'z': 'mock test'})

En la salida del código, podemos ver que el valor *args se imprime primero, que es x y el valor **kwargs {'y': 2, 'z': 'mock test'}) se imprime después de él.

Simulacro de Python que devuelve según la entrada

Ahora crearemos un simulacro que devuelva la función que discutimos anteriormente.

  • Para crear una función simulada, primero importaremos MagicMock desde el módulo unittest.mock.
  • Cree una variable y use el MagicMock de unittest.mock.
  • Imprime el resultado.

Código de ejemplo:

from unittest.mock import MagicMock

my_mock_1 = MagicMock(name="abid", return_value=mock_function)
my_mock_1

Producción :

<MagicMock name='abid' id='139916486559696'>

La salida del código muestra que se utiliza el comando MagicMock. Y podemos ver el nombre abid que usamos en el código y un número de identificación generado por el código.

Ahora crearemos otra variable para ver dónde está nuestra variable my_mock_1.

Código de ejemplo:

func_from_mock2 = my_mock_1()
func_from_mock2

Producción :

<function __main__.mock_function(*args, **kwargs)>

La salida del código muestra que la función lleva los argumentos *args y el argumento de palabra clave **kwargs.

Ahora le daremos algunos valores a nuestra variable func_from_mock2. Así que pasaremos 10, 10 y lo imprimiremos.

Código de ejemplo:

func_from_mock2(10, 10)

Producción :

((10, 10), {})

La salida ((10, 10)) significa que hemos usado los argumentos *args y {} significa que podemos usar el argumento de palabra clave **kwargs.

Ahora usaremos el argumento de palabra clave **kwargs.

Código de ejemplo:

func_from_mock2(15, 18, parámetro=50)

Producción :

((15, 18), {'param': 50})

Hemos usado los argumentos *args y el argumento de palabra clave **kwargs. ((15, 18), muestra la parte del argumento de la entrada simulada y {'param': 50}) muestra la parte del argumento de la palabra clave de la entrada simulada.

Entonces, así es como Mock devuelve diferentes valores según la entrada.

Esperamos que encuentre útil este artículo de Python para comprender cómo usar Mock en Python.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Artículo relacionado - Python Mock