Testing en Python: Hacer mock de una variable global
Estaba intentando probar algunas variables globales con Python, especialmente para un script el cual contiene variables globales. Y después de intentarlo y fallar, pienso que puedo mostrarte la versión más simple de hacerlo.
🏃 La solución rápida
Ahora, en tu archivo de test, puedes hacer lo siguiente.
Después en tu archivo_demo
la variable ENVS estará como mocked.
✏️ La solución detallada
Requerimientos
- Para facilidad del trabajo. Recomiendo la siguiente librería: https://pypi.org/project/pytest-mock/
¿Qué estaba intentando hacer?
Primero, supongamos que tengo un archivo llamado archivo_demo.py
con el siguiente contenido (y donde la variable global está localizada).
Si tratas de ejecutar metodo_simple
va a mostrar el diccionario con valor_real
y otro_valor_real
allí.
Ahora tenemos el siguiente archivo de test.
Ya sé que el test se ve simple, pero se asegura al menos de retornar un valor cero después de mostrar los valores ENVs.
👾 Sobreescribiendo y simulando (hacer un mock de) las variables
Pero como puedes ver, estamos llamando las variables de entorno de la computadora que usemos, y si tú escribes tus tests, esperando tenerlas en el servidor CI/CD, entonces los tests comenzarán a fallar. ¿Cómo podemos evitar eso y decirle a nuestro servidor de testing (o pipeline de testing) que queremos valores fijos?
Si instalaste la librería mencionada arriba, en la sección de requerimientos, es muy fácil comenzar a mockear valores. Así que solamente necesitamos agregar una sola línea.
Y tus tests no ejecutarán la variable ENVS
y, por lo tanto, tampoco llamarán a os.environ
.