如何在Pytest中Mock非类成员的独立函数?
Pytest Mock独立函数不生效?看这里
问题出在你patch的路径不对。你现在patch的是target.dep.some_dep,但MyClass所在的target.myclass模块已经把some_dep的引用导入到自己的命名空间里了——Python里from ... import ...是直接复制函数对象的引用,原模块的函数被替换后,已导入的引用不会跟着变,所以你的Mock根本没作用到MyClass.do()调用的那个some_dep上。
直接改测试代码里的patch路径就行,改成patchtarget.myclass里的some_dep:
import mock from target.myclass import MyClass @mock.patch("target.myclass.some_dep", return_value="PATCHED", autospec=True) def test_do(mock_some_dep): m = MyClass() assert m.do() == "thing done PATCHED"
简单说就是:Mock要盯着被测试代码实际用的那个引用位置,而不是原函数所在的模块。因为MyClass用的是自己模块里导入的some_dep,不是原模块的,所以得patch这个导入后的位置。
内容的提问来源于stack exchange,提问作者engineer-x
相关产品推荐
相关产品推荐

