所以,主要问题在标题上。我试图找出说python模拟模块使用依赖注入模式来模拟对象调用是否正确。
我不熟悉 DI 模式,但从我所阅读的内容和我在模块底层看到的调试器mock
看起来像 mock() 使用 DI。
我是对的,mock() 是 DI 还是我错过了关于这种模式和嘲笑的东西?
mock
模块不使用依赖注入。
mock
用自定义对象替换某些对象。
为了使用依赖注入,必须有一些顶级进程,它将搜索要调用的函数,检测到要传递给它们的参数,实例化它们并最终进行调用。
mock
只修改对象,并且对此对象的调用照常完成 - 直接调用该对象。
如果你想找到依赖注入的例子,请检查pytest
和它的夹具 - 他们经常使用它,使用它很有趣。
我想你主要关心的是用unittest.mock.patch
来模拟对象的属性。
patch
是一个函数,它只返回类unittest.mock._patch
的实例。 _patch
是一个上下文管理器,它在__enter__
时对属性进行猴子修补,并在__exit__
时取消对属性进行修补。