2016-04-23 63 views
3

所以,主要问题在标题上。我试图找出python mock模块是否使用依赖注入模式来模拟对象调用是否正确。python模拟模块是否通过依赖注入工作?

我不熟悉DI模式,但是从我读过的和我在调试器中看到的mock模块发行版看起来像mock()使用DI。

我是对的,模拟()是DI还是我错过了这种模式和嘲讽?

回答

2

mock模块不使用依赖注入。

mock用自定义的替换一些对象。

要使用依赖注入,必须有一些顶级进程,它将搜索要调用的函数,检测到的参数传递给它们,实例化它们并最终进行调用。

mock只修改对象,并且按照惯例完成对这个对象的调用 - 直接调用该对象。

如果你想找到依赖注入的例子,请检查pytest及其固定装置 - 它们使用它很多,使用它很有趣。

+0

谢谢!那么,看起来像模拟使用了一些“monkeypatching”方法? – Paul

+1

@保罗是的,你是对的。 –

0

我想你主要关心的是用unittest.mock.patch来嘲讽一个对象的属性。

patch是一个函数,它只是返回类unittest.mock._patch的一个实例。 _patch是一个上下文管理器,它通过__enter__ monkeypatches属性,并在__exit__上修改它。