prueba unitaria, simular time.sleep en otro paquete
Tengo un proyecto en Pycharm con código de paquetes bajo prueba y puedo importar el paquete como import my_package
desde otro módulo en el proyecto, ya que Pycharm configura Python para incluir el directorio del proyecto en su ruta de búsqueda.
El módulo my_module
en my_package
importa time
y usa time.sleep
, lo cual quiero simular.
projectdir/mi_paquete
__init__.py
mi_modulo.py
projectdir/tests
test_mi_paquete.py
En el test tengo el siguiente código:
import unittest
from unittest.mock import patch
from mi_paquete import mi_modulo
@patch("mi_paquete.mi_modulo.time.sleep")
class TestMiPaquete(unittest.TestCase):
def test_bla(self, timepatch):
mi_modulo.mi_funcion()
El problema que tengo es que el método time.sleep
no se simula. Mis pruebas unitarias tardan alrededor de 0.5 segundos por cada caso de prueba, lo cual es demasiado. Supongo que estoy simulando en el lugar equivocado.
¿Puedes ayudarme a corregir el decorador @patch("my_package.my_module.time.sleep")
?
davy.ai
El problema con el decorador
@patch ("my_package.my_module.time.sleep")
es que está intentando parchear el atributosleep
del módulotime
en el espacio de nombresmy_package.my_module
, el cual no existe.Para solucionar esto, necesitamos parchear el atributo
sleep
del módulotime
directamente. Podemos hacer esto cambiando el decorador a@patch ("time.sleep")
. Esto parcheará el atributosleep
del módulotime
incorporado y simulará su comportamiento en nuestra prueba unitaria.Aquí está el código actualizado:
Con este código actualizado, la función
time.sleep
se parcheará correctamente en la llamada a la funciónmy_module.my_function
dentro del método de pruebatest_bla
.