【发布时间】:2013-05-07 21:45:54
【问题描述】:
有一些 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”,我很抱歉。欢迎提出想法。
【问题讨论】:
标签: python windows built-in shadowing pwd