Dmi*_*san 5 python windows built-in shadowing pwd
有一些python代码可以在Linux下运行.它以这样的方式使用pwd模块:
import pwd
...
def func():
user=pwd.getpwnam(user)[2]
Run Code Online (Sandbox Code Playgroud)
现在我们有一个特定的需要用测试来覆盖这个代码,测试必须在Windows下运行.程序本身只能在Linux下运行.问题是pwd模块在Windows下不可用,因此即使使用MagicMock模拟了pwd函数的实现,受测试的代码也会因ImportError而失败.
解决此问题的基本思想是在运行测试时隐藏pwd模块.因此,当运行测试时,存根将影响pwd,并且在运行主程序时,将使用原始(Unix)pwd.我们在测试PYTHONPATH时创建了这样的存根:
# pwd.py
def getpwnam(user):
print("YESSSSSSSS")
Run Code Online (Sandbox Code Playgroud)
但它似乎没有影响一个pwd模块,在调试器中我们看到内置的pwd是导入的.我主要是一名Java开发人员,所以如果做事的方式不是"pythonic",我很抱歉.欢迎提出想法.
unu*_*tbu 11
将您重命名pwd.py
为其他内容,例如winpwd.py
.然后使用:
try:
import pwd
except ImportError:
import winpwd as pwd
Run Code Online (Sandbox Code Playgroud)
通过pwd
这种方式导入,您将获得pwd
Linux和winpwd
Windows 上的内置功能.然后你应该能够运行测试并随意模拟它.
import os
if os.name == 'nt':
class Pwd():
def getpwnam(self, user):
pass
pwd = Pwd()
else:
import pwd
Run Code Online (Sandbox Code Playgroud)
类似的工作可以吗?项目中不需要额外的 .py 文件。
我自己用过fchown
几次...
归档时间: |
|
查看次数: |
11734 次 |
最近记录: |