有一些Python代码可以在Linux下运行。 它以这样的方式使用pwd模块:
import pwd ... def func(): user=pwd.getpwnam(user)[2]
现在我们有一个特定的需求来testing这个代码,testing必须在Windows下运行。 程序本身只能在Linux下运行。 问题是pwd模块在Windows下不可用,所以即使使用MagicMock模拟了pwd函数的实现,被testing的代码也会导致ImportError失败。
解决这个问题的基本思路是在运行testing时隐藏pwd模块。 所以在运行testing的时候,存根会影响pwd,当运行主程序时,会使用原始的(Unix)密码。 我们在testingPYTHONPATH时创build了这样的存根:
# pwd.py def getpwnam(user): print("YESSSSSSSS")
但是它似乎并不影响pwd模块,在debugging器中,我们看到内置的pwd被导入。 我主要是一个Java开发人员,所以我很抱歉,如果做事的方式不是“pythonic”。 想法是受欢迎的。
将你的pwd.py
重命名为其他的,比如winpwd.py
。 然后使用:
try: import pwd except ImportError: import winpwd as pwd
通过这种方式导入pwd
,你将获得Linux上的内置pwd
,以及Windows上的winpwd
。 那么你应该能够运行测试和嘲笑它,只要你喜欢。
import os if os.name == 'nt': class Pwd(): def getpwnam(self, user): pass pwd = Pwd() else: import pwd
可以做类似的工作吗? 您的项目中不需要额外的.py文件。
我已经用它来fchown
自己几次了