2017-01-17 11 views
0

Я работаю с python, и я немного новичок в тестировании. Я часто вижу тесты замены внешней зависимости с локальным методом так:В чем разница между насмешками и патчами обезьян?

import some_module 

def get_file_data(): 
    return "here is the pretend file data" 

some_module.get_file_data = get_file_data 

# proceed to test 

Я вижу это называется «обезьяна заплат», как и в question. Я также вижу, что слово «макет» часто используется наряду с «переделкой денег» или, по-видимому, очень похожими сценариями.

Есть ли разница между двумя концепциями?

ответ

1

Monkey patching заменяет функцию/метод/класс другим во время выполнения, для тестирования пупов, исправления ошибок или изменения поведения.

unittest.mock library использует патч обезьяны для замены части вашего программного обеспечения, тестируемого макетными объектами. Он обеспечивает функциональные возможности для написания умных UnitTests, такие как:

  • Она хранит запись о том, как насмешке объекты называют, так что вы можете проверить вызывающее поведение вашего кода с утверждают.
  • Удобный декоратор patch() для фактического исправления обезьяны.
  • Вы можете сделать ложные объекты для возврата определенных значений (return_value), поднять определенные исключения (side_effect).
  • Исправление «магических методов» (например, __str__).

Вы можете использовать насмешку, например, для замены сетевого ввода-вывода (urllib, запросов) на клиенте, поэтому unittests работают независимо от внешнего сервера.