如何显示python的内置模块_如何隐藏python内置的pwd模块

1586010002-jmsa.png

There is some python code that works under Linux. It uses the pwd module in a way like that:

import pwd

...

def func():

user=pwd.getpwnam(user)[2]

Now we have a specific need to cover this code with tests, and tests have to be runnable under Windows. The program itself is intended to run only under Linux. The problem is that pwd module is not available under Windows, so the code under test will fail with ImportError, even if the implementation of pwd functions is mocked using MagicMock.

The basic idea to solve this issue was to shadow the pwd module when running tests. So when running tests, the stub will shadow pwd and when running main program, original (Unix) pwd will be used. We created such stub at test PYTHONPATH:

# pwd.py

def getpwnam(user):

print("YESSSSSSSS")

But it does not seem to shadow a pwd module, in a debugger we see that the built-in pwd is imported. I'm primarily a Java developer, so I'm sorry if the way of doing things is not "pythonic". Ideas are welcome.

解决方案

Rename your pwd.py to something else, such as winpwd.py. Then use:

try:

import pwd

except ImportError:

import winpwd as pwd

By importing pwd this way, you will get the built-in pwd on Linux, and winpwd on Windows. Then you should be able to run tests and mock it as you please.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值