Заменить клиентскую библиотеку на макет из теста? - PullRequest
1 голос
/ 24 ноября 2010

Есть ли способ заменить клиентскую библиотеку (которая взаимодействует с удаленным сервером) на фиктивный объект изнутри юнит-теста?

Вот диаграмма, объясняющая, что я пытаюсь сделать

    +---------------+
    |     tests     |----{ mock }
    +---------------+       |
            |               |
            v               |
    +---------------+       |
    |     model     |       |
    +---------------+       |
            |               |
            v               |
    +---------------+       |
    | client-module |<--{replaces}
    +---------------+
            ^
            :
            :
            v
    +---------------+
    |    service    |
    +---------------+

Поскольку тесты импортируют модель, которая импортирует клиентский модуль, похоже, не существует способа применить макет к внутренностям модели.

1 Ответ

1 голос
/ 24 ноября 2010

Если model.py выполняет

import client_module

и не использует какие-либо его функции во время импорта, вы можете сделать

import model

...

model.client_module = MyMockModule()

, где MyMockModule возвращает подходящие макетыза вещи настоящие client_module.Я не показывал вещи setUp / tearDown, чтобы позаботиться об этом, но, надеюсь, вы поймете, что

Если model использует вещи из client_module во время импорта,Перед импортом model.

потребуется заменить sys.modules['client_module'] на смоделированный модуль.
...