Python | Prueba de salida a stdout

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.mockdel 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 de sys.stdoutcon 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *