Python AutoSpec burking

Python AutoSpec burking
“Al desarrollar pruebas, la burla y las simulacros son increíblemente útiles, ya que permiten separar la referencia hecha fuera de sus dependencias, lo que resulta en menos pruebas frágiles. Al incluir simulacros en las pruebas unitarias, podemos estar seguros de que cualquier fallas será causada por una modificación de cómo se implementa el objetivo de la prueba. Sin embargo, la configuración de simulacros puede dar lugar a pruebas que pasan cuando necesitan fallar. Dentro de este artículo, utilizaremos algunos ejemplos para ilustrar el funcionamiento del burlamiento automático en Python."

Ejemplo 01

Comencemos con la primera ilustración. La calculadora.El módulo PY incluye las líneas de código posteriores. En la primera línea, definimos la adición de la función y se multiplicamos para la calculadora de clase. Dos números se multiplican juntos usando la segunda función llamada "Multiply"; Del mismo modo, la primera función se usa para obtener la suma de los dos números. Ambas funciones solo devuelven la adición y algunos de los números suministrados; No imprimen ninguna salida.

Hemos creado dos funciones de módulo fuera de la clase en la que se crean los objetos de clase del tipo de calculadora, y se llaman a los métodos de adición y multiplicación de la clase de calculadora. Verifique el código en la imagen fija.

La suma y las funciones de multiplicación de la calculadora.El módulo PY se utilizará en el módulo sencillo que estamos construyendo, la calculadora de prueba.py. El código es increíblemente simple; Solo estamos importando los métodos de multiplicación y suma del módulo de calculadora. Después de eso, ejecutamos la función de suma y suministramos los 2 y 5 como parámetros.

Similar a cómo llamamos a la función de multiplicación, pasamos los parámetros 5 y 3 en esta función de módulo. Usando la declaración de impresión, mostramos la salida que devuelven estas funciones. Verifique el código en la imagen fija.

Ejecute el test_calculator.módulo py en este momento para ver los resultados. Aunque puede usar cualquier otra herramienta, estamos escribiendo y ejecutando el código utilizando la herramienta Spyder 3. La salida en el terminal de la herramienta Spyder es visible, como puede ver. Usando la calculadora.Clase PY, la salida de multiplicación de la función es 15, y su salida de suma es 7, que es el resultado previsto.

Ejemplo 02

Ahora vamos a una prueba de suma y multiplicación, pero supongamos que tenemos que burlarnos de la adición y multiplicar las funciones. Burlarse y simulacros son muy útiles cuando estamos escribiendo pruebas para nuestros módulos porque nos permiten aislar los objetivos de prueba de sus dependencias que causan pruebas menos frágiles. Si empleamos simulacros en nuestras pruebas unitarias, cualquier prueba que falle lo hará debido a una modificación realizada a la implementación del objetivo.

Sin embargo, podemos construir la maqueta de una manera que pueda evitar que las pruebas fallaran cuando deberían! Actualicemos nuestro test_calculator.módulo py para agregarle código de maqueta. La instantánea del código se muestra a continuación:

Cuando se ejecuta, esta prueba fácil es exitosa. Especificar implica construir un objeto simulado con la misma API/estructura que el objeto burlado, uno que fallará si se usa de una manera que se desvía de la especificación. La función create_aUtospec en el módulo simulado es el primero de los dos métodos para lograr esto. Construyamos un objeto simulado utilizando la especificación de la función dada. Verifique el código en la imagen fija.

Usando otro objeto como especificación, se crea un objeto simulado utilizando la función Crear AutoSpec. La firma de todas las funciones que se convocan en el simulacro se verifica primero. Esto es ventajoso porque la función simulada ahora se basa en la implementación real, y encontraremos un problema si la versión cambia y la calculadora no respeta las firmas de los dependientes.

Cuando ejecutamos la pieza de código anterior para la prueba unitaria, entonces, no encontramos ningún error durante la ejecución. Significa que hemos pasado la prueba. Ahora hemos actualizado el código y agregamos solo unas pocas líneas. Hemos pasado la función de multiplicación a la función create_aUtoSpace y guardamos la salida de multiplicar. Verifique el código en la imagen fija.

Cuando llamamos a la función para multiplicar con un solo parámetro y ejecutar el código luego, plantea un error en la pantalla de salida como se indica a continuación:

Si no pasamos ningún parámetro a esta función, le pide al usuario que ingrese los valores NUM1 y NUM2. Verifique el código en la imagen fija.

Aquí está la captura de pantalla de la ejecución del código:

Cuando pasamos los argumentos NUM1 y NUM2, la prueba anterior se ejecuta con éxito; Los cambios en los códigos se pueden ver en la pantalla a continuación:

Como discutimos anteriormente, Create_AUTOSPEC es un método para hacerlo, pero otro es establecer autospec = verdadero cuando se usa el decorador de parche para simular un objeto. Volveremos al módulo test_calculator y actualizaremos el código como se da a continuación la captura de pantalla. Las dos primeras líneas ya se han utilizado en varios casos. El nombre de la función del módulo y el valor verdadero para el AUTSPEC se pasaron a @mock.Método de ruta en la tercera línea de código.

A la derecha a continuación, hemos definido una función que se llama test_multyly donde hemos pasado la variable del objeto simulado; Más tarde, tenemos que usar la misma variable para llamar a la función multiplicar. Hay una línea en este código que contiene un error que es el 6th línea porque tenemos que usar la función de maqueta para operar en lugar de usar directamente la función de multiplicación. Verifique el código en la imagen fija.

Aquí está el código actualizado. Cuando ejecutamos esta prueba unitaria, no recibimos ningún error, lo que significa que esta prueba se pasa. Verifique el código en la imagen fija.

Conclusión

Se trata del uso de Python AutoSpec burlándose en algunos de nuestros ejemplos de Python ejecutados en la herramienta Spyder 3 Python. Todos los ejemplos utilizados en este artículo son fáciles de hacer y aprender. Entonces, intente no perderse ninguno de estos para comprender mejor.