有一些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”,我很抱歉。欢迎提出意见。
答案 0 :(得分:10)
将pwd.py
重命名为其他内容,例如winpwd.py
。然后使用:
try:
import pwd
except ImportError:
import winpwd as pwd
通过这种方式导入pwd
,您将获得Linux上的内置pwd
和Windows上的winpwd
。然后你应该能够运行测试并随意模拟它。
答案 1 :(得分:4)
import os
if os.name == 'nt':
class Pwd():
def getpwnam(self, user):
pass
pwd = Pwd()
else:
import pwd
有类似的工作吗?您的项目中不需要额外的.py文件
我自己曾经用fchown
几次......