2013-05-13 6 views
5

리눅스에서 작동하는 파이썬 코드가 있습니다. 그림자 파이썬 내장 pwd 모듈

import pwd 
    ... 
    def func(): 
     user=pwd.getpwnam(user)[2] 

이제 우리는 시험이 코드를 충당하기 위해 특정 필요가 있고, 테스트는 Windows에서 실행 가능한 있어야합니다 : 그것은 그런 방법으로 PWD 모듈을 사용합니다. 프로그램 자체는 Linux에서만 실행됩니다. 문제는 Windows에서 pwd 모듈을 사용할 수 없기 때문에 pwd 함수 구현이 MagicMock을 사용하여 조롱 된 경우에도 테스트중인 코드가 ImportError와 함께 실패합니다.

이 문제를 해결하기위한 기본적인 아이디어는 테스트를 실행할 때 pwd 모듈을 섀도 잉하는 것이 었습니다. 따라서 테스트를 실행할 때 스텁은 pwd를 섀도 잉하고 메인 프로그램을 실행할 때 원본 (Unix) pwd가 사용됩니다. 우리는 시험 PYTHONPATH에 같은 스텁을 생성 :

# pwd.py 
def getpwnam(user): 
    print("YESSSSSSSS") 

그러나 우리가 내장 된 PWD하는 것은 가져 볼 디버거에서는, PWD 모듈을 그림자하지 않는 것 같습니다. 나는 주로 자바 개발자이기 때문에 일을하는 방식이 "파이썬"이 아니라면 미안합니다. 아이디어를 환영합니다.

답변

9

pwd.py의 이름을 winpwd.py과 같은 다른 이름으로 변경하십시오. 그런 다음 사용

try: 
    import pwd 
except ImportError: 
    import winpwd as pwd 

이 방법을 pwd 가져 오면 얻을 것이다 내장 된 리눅스에 pwd 및 Windows에 winpwd. 그러면 테스트를 실행하고 원하는대로 조롱 할 수 있어야합니다.

+0

우수 답변, 단지 우리가 필요로하는 것! – Dmitriusan

+0

winpwd를 어떻게 설치해야합니까? pip에는 색인이 생성되지 않으며 Google 검색은 이상한 것을 찾습니다. – syonip

+0

동일한 문제가 있습니다. – Locane

4
import os 
if os.name == 'nt': 
    class Pwd(): 
     def getpwnam(self, user): 
      pass 
    pwd = Pwd() 
else: 
    import pwd 

비슷한 작업이 가능합니까? 프로젝트 내에서 .py 파일을 추가로 설치할 필요가 없습니다.
나는 fchown 자신을 몇 시간 동안 사용했습니다 ...

+0

작성된대로 작동하지 않습니다. 모든 메소드는 @class 메서드가 장식 된 함수 여야합니다. –

+0

왜 작동하지 않습니까? 방금 제정 할 수있는 수업을 만들었습니까? 고쳐? – Torxed

+2

편집 한 코드는 이전 버전이 아니라 작동합니다. –