2010-11-24 2 views
1

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

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

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

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

ответ

1

Если model.py делает

import client_module 

и не использует его элементы во время импорта, вы можете сделать

import model 

... 

model.client_module = MyMockModule() 

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

model Если делает использование вещи из client_module во время импорта, вам необходимо заменить sys.modules['client_module'] с издевались модулем перед импортом model.

Смежные вопросы