В чем разница между издевательством и обезьяньим латанием?


Я работаю с 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
Я вижу, что это называется "исправлением обезьян", как в вопросе . Я также вижу, что слово " МОК "часто используется наряду с" исправлением денег " или в очень похожих сценариях. Есть ли разница между этими двумя понятиями?
1 4

1 ответ:

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

Unittest .mock library использует monkey patching для замены части тестируемого программного обеспечения на mock objects. Он обеспечивает функциональность для написания умных unittests, таких как:

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

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