有一些 Python 代码可以在 Linux 下运行。它以如下方式使用 pwd 模块:
import pwd
...
def func():
user=pwd.getpwnam(user)[2]
现在我们特别需要用测试覆盖这段代码,并且测试必须在 Windows 下运行。该程序本身旨在仅在 Linux 下运行。问题是 pwd 模块在 Windows 下不可用,因此即使使用 MagicMock 模拟了 pwd 函数的实现,被测代码也会因 ImportError 而失败。
解决这个问题的基本思路是在运行测试时隐藏 pwd 模块。因此,在运行测试时,存根将隐藏 pwd,而在运行主程序时,将使用原始(Unix)pwd。我们在测试 PYTHONPATH 中创建了这样的存根:
# pwd.py
def getpwnam(user):
print("YESSSSSSSS")
但它似乎没有隐藏 pwd 模块,在调试器中我们看到内置 pwd 已导入。我主要是一名Java开发人员,所以如果做事方式不是“pythonic”,我很抱歉。欢迎提出想法。