Las pruebas son una parte fundamental del desarrollo, ya que no hay un compilador que analice el código antes de que Python lo ejecute.
Dado un programa que tiene un método cuya salida va a Salida estándar (sys.stdout) . Esto casi siempre significa que emite texto a la pantalla. A uno le gusta escribir una prueba para el código para demostrar que, dada la entrada adecuada, se muestra la salida adecuada.
Usando la función del módulo unittest.mockpatch()
, es bastante simple simular sys.stdout para una sola prueba y volver a colocarlo, sin variables temporales desordenadas o fugas de estado simulado entre casos de prueba.
Código #1: Ejemplo
def urlprint(protocol, host, domain): url = '{}://{}.{}'.format(protocol, host, domain) print(url)
La print
función integrada, de forma predeterminada, envía la salida a sys.stdout
. Para probar que la salida realmente está llegando allí, se debe simular utilizando un objeto sustituto y luego hacer afirmaciones sobre lo que sucedió.
El uso unittest.mock
del método del módulo patch()
hace que sea conveniente reemplazar objetos solo dentro del contexto de una prueba en ejecución, devolviendo las cosas a su estado original inmediatamente después de que se completa la prueba.
Código #2: Código de prueba para el código anterior
from io import StringIO from unittest import TestCase from unittest.mock import patch import mymodule class TestURLPrint(TestCase): def test_url_gets_to_stdout(self): protocol = 'http' host = 'www' domain = 'example.com' expected_url = '{}://{}.{}\n'.format(protocol, host, domain) with patch('sys.stdout', new = StringIO()) as fake_out: mymodule.urlprint(protocol, host, domain) self.assertEqual(fake_out.getvalue(), expected_url)
- La
urlprint()
función toma tres argumentos y la prueba comienza configurando argumentos ficticios para cada uno. La variable url_esperada se establece en una string que contiene el resultado esperado. - Para ejecutar la prueba, la
unittest.mock.patch()
función se usa como administrador de contexto para reemplazar el valor desys.stdout
con un objeto StringIO como sustituto. - La variable fake_out es el objeto simulado que se crea en este proceso. Esto se puede usar dentro del cuerpo de la instrucción with para realizar varias comprobaciones. Cuando se completa la instrucción with, el parche convenientemente vuelve a poner todo como estaba antes de que se ejecutara la prueba.
- Vale la pena señalar que ciertas extensiones de C para Python pueden escribir directamente en la salida estándar, omitiendo la configuración de sys.stdout.
Publicación traducida automáticamente
Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA