Faire un mock pour une variable globale dans les tests de Python

Faire un mock pour une variable globale dans les tests de Python

J’ai essayé de tester quelques variables globales dans Python, spécialement pour un script, qui contient des variables globales. Et après avoir essayé et essayé (et échouer), je pense que je peux te comment le faire.

🏃 La solution la plus rapide

fichier_demo.py
ENVS = { 'vraie_valeur': True, 'autre_vraie_valeur': False }

Maintenant, dans ton fichier de test, tu peux faire ce qui suit

test_fichier_demo.py
mocker.patch("fichier_demo.ENVS", new={'MOCKED_NONE': None, 'MOCKED_VIDE': ''})

Ensuite, dans ton fichier_demo , la variable ENVS sera comme mocked.

✏️ La solution avec des descriptions

Conditions

Pour faciliter le travail, je vais recommander l’outil suivant: https://pypi.org/project/pytest-mock/

Qu’est-ce que je voulais faire?

Tout d’abord, nous avons un fichier appelé fichier_demo.py avec le contenu suivant (et où est la variable globale).

fichier_demo.py
import os
ENVS = { 'vraie_valeur': os.environ('VRAIE_VALEUR'), 'autre_vraie_valeur': os.environ('VRAIE_VALEUR') }
def fonction_simple():
print(ENVS)
return 0

Si tu essayes d’éxecuter fonction_simple , elle montrera le dictionnaire avec vraie_valeuret autre_vraie_valeur là.

Maintenant, nous avons le fichier suivant de test

tester_mes_envs.py
from fichier_demo import fonction_simple
def tester_si_fonction_simple_fonctionne():
assert fonction_simple() == 0

Voyons, je sais que le test semble simple, mais il s’assure de retourner une valeur zéro après montrer les valeurs ENVs.

👾 Écrasement et simulation (se moquer) des variables

Comme tu peux le voire, on appelle les variables d’environnement qui vient de l’ordinateur qu’on utilise, et si tu écrire tes tests, on espère les avoir dans le serveur CI/CD, ensuite les tests commenceront à échouer. Comment pouvons-nous éviter ça et utiliser des valeurs fixées dans notre serveur de tests (ou pipeline).

Si tu as installé l’outil mentionné ci-dessus, dans la section de Conditions, il est très facile de commencer de se moquer des valeurs. On a donc juste besoin d’ajouter une seule ligne.

tester_mes_envs.py
from fichier_demo import fonction_simple
@mocker.patch("fichier_demo.ENVS", new={'VRAIE_VALEUR_MOCKED': None, 'AUTRE_VRAIE_VALEUR_MOCKED': ''})
def tester_si_fonction_simple_fonctionne():
assert fonction_simple() == 0

Et tes tests n’exécuteront pas la variable ENV vraie, et par conséquent, ils n’appelleront pas os.environ.

Mes articles ne sont pas generés par l'IA, cependant ils pourrait y être corrigés. Le premier brouillon est ma création originale

Tags

Auteur

Écrit par Helmer Davila

Dans d'autres langues

I was trying to test some global variables with Python, specially for a script which contain global variables. And after trying and failing I think that I can show you the most simple version to do it.

Mocking global variables in Python tests

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.

Testing en Python: Hacer mock de una variable global

Estava tentando testar algumas variáveis globais com Python, especialmente para um script que contém variáveis globais

Fazer mocks de variáveis globais em testes Python

Articles connexes

C'est utile pour éviter les appels réels vers une API ou un service.

Comment utiliser des fonctions comme des mocks dans les tests de Python