es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Script de pruebas unitarias en Python que llama a algunas funciones.

Terminé probando un script de “automatización” en python, básicamente es solo un script que llama a un montón de funciones.

Tengo 3 clases: clase A, clase B, clase C, cada una con una función “run”.

Script.py está llamando a A.run(), B.run(), C.run().

Mi pregunta sería si hay alguna manera de probar Script.py solo para afirmar si se llamaron las 3 funciones run, sin ejecutar realmente (pasar por su código) las funciones.

Intenté parchear la clase y puedo obtener la afirmación correcta, pero las funciones run todavía están ejecutando su código.

¿Es posible de alguna manera simular la ejecución de class_A.run() y afirmar si se llamó?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible simular la función class_A.run() y comprobar si fue llamada sin ejecutar realmente el código dentro de la función. Puedes utilizar la biblioteca unittest.mock en Python para lograr esto.

    Aquí tienes un ejemplo de cómo simular la función class_A.run() y comprobar si fue llamada en tu caso de prueba:

    from unittest.mock import patch
    import Script
    
    def test_script_calls_all_run_functions():
        with patch.object(class_A, 'run') as mock_method_a:
            with patch.object(class_B, 'run') as mock_method_b:
                with patch.object(class_C, 'run') as mock_method_c:
                    Script.run_script()
                    mock_method_a.assert_called_once()
                    mock_method_b.assert_called_once()
                    mock_method_c.assert_called_once()
    

    En este ejemplo, estamos usando el método patch.object() para reemplazar el método class_A.run() con un objeto simulado. Hacemos lo mismo para los métodos class_B.run() y class_C.run() también.

    Luego, invocamos la función Script.run_script(), que debería llamar a los tres funciones run. Finalmente, utilizamos el método assert_called_once() para asegurar que las tres funciones run fueron llamadas exactamente una vez.

    Al simular estos métodos, evitamos la ejecución del código real dentro de ellos, pero aún así podemos rastrear si fueron llamados durante la ejecución de Script.py.

Comments are closed.