J'ai trouvé un bon moyen de simuler les importations en Python. C'est Zaadi d'Eric solution trouvée aquí que j'utilise simplement dans mon Django application.
J'ai de la classe SeatInterface
qui est une interface pour Seat
classe de modèle. Ainsi, dans ma seat_interface
module j'ai une telle importation :
from ..models import Seat
class SeatInterface(object):
(...)
Je voulais créer des tests isolés pour SeatInterface
avec une classe simulée Seat
comme FakeSeat
. Le problème était de savoir comment exécuter les tests hors ligne, lorsque l'application Django est hors service. J'avais l'erreur suivante :
ImproperlyConfigured : Le paramètre demandé BASE_DIR, mais les paramètres ne sont pas configurés. Vous devez soit définir la variable d'environnement DJANGO_SETTINGS_MODULE ou appeler settings.configure() avant d'accéder aux paramètres.
Exécuté 1 test en 0.078s
FAILED (erreurs=1)
La solution était :
import unittest
from mock import MagicMock, patch
class FakeSeat(object):
pass
class TestSeatInterface(unittest.TestCase):
def setUp(self):
models_mock = MagicMock()
models_mock.Seat.return_value = FakeSeat
modules = {'app.app.models': models_mock}
patch.dict('sys.modules', modules).start()
def test1(self):
from app.app.models_interface.seat_interface import SeatInterface
Et ensuite, comme par magie, le test se déroule correctement :)
.
Exécuté 1 test en 0.002s
OK