模拟和猴子修补有什么区别?

时间:2017-01-17 15:38:38

标签: python unit-testing testing mocking monkeypatching

我使用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 个答案:

答案 0 :(得分:7)

Monkey patching正在运行时替换另一个函数/方法/类,用于测试purpses,修复错误或以其他方式改变行为。

unittest.mock library使用猴子补丁来替换模拟对象测试的部分软件。它提供了编写聪明的单元测试的功能,例如:

  • 它记录了如何调用模拟对象,因此您可以进行测试 带有断言的代码的调用行为。
  • 一个方便的装饰师patch()用于实际的猴子修补。
  • 您可以使模拟对象返回特定值(return_value),引发特定异常(side_effect)。
  • 嘲弄'魔法'(例如__str __)。

例如,您可以使用模拟替换客户端中的网络I / O(urllib,请求),因此单元测试可以在不依赖外部服务器的情况下工作。