在用mock
这个库的时候碰到一个坑,即“where to patch”的问题。我尝试把问题重现了一下,简化成了如下的版本:
首先有这样一个安装好的package,目录结构如下:
mypkg
├── __init__.py
├── lib
│ ├── __init__.py
│ ├── another_lib.py
│ └── mylib.py
└── main.py
其中,another_lib.py
中代码很简单,就一个函数:
def hello():
print('hello')
在mylib.py
中会调用another_lib.py中的那个函数:
from another_lib import hello
def myfunc():
hello()
而main.py
中则调用了mylib.py中的函数(两个__init__.py
都是空的):
import sys
import os
dirname = os.path.dirname(os.path.normpath(os.path.join(__file__)))
sys.path.append(os.path.join(dirname, "lib"))
from mylib import myfunc
def main():
myfunc()
现在,在我的目标是想要用mock
来替换函数hello
。