Linuxで動作するいくつかのpythonコードがあります。これは、そのような方法で、PWDモジュールを使用しています。シャドーpython組み込みのpwdモジュール
import pwd
...
def func():
user=pwd.getpwnam(user)[2]
は、今、私たちは、テストでこのコードをカバーするために、特定の必要性を持っている、とのテストはWindows上で実行可能でなければなりません。プログラム自体は、Linux上でのみ動作するように意図されています。問題は、pwdモジュールがWindowsでは使用できないため、pwd関数の実装がMagicMockを使用して実装されていても、テスト対象のコードがImportErrorで失敗することです。
この問題を解決するための基本的な考え方は、テスト実行時にpwdモジュールをシャドーすることでした。したがって、テストを実行すると、スタブはpwdをシャドウにし、メインプログラムを実行するときに、元の(Unix)pwdが使用されます。私たちは、テストPYTHONPATHでそのようなスタブを作成しました:
# pwd.py
def getpwnam(user):
print("YESSSSSSSS")
しかし、我々がビルトインPWDがインポートされていることがわかり、デバッガで、PWDモジュールをシャドウしていないようです。私は主にJava開発者ですので、やり方が「pythonic」でないとすみません。アイデアは大歓迎です。
優れた答え、ちょうど私たちが必要なもの! – Dmitriusan
winpwdのインストール方法は? pipには索引が付けられておらず、Google検索では奇妙なものが見つかります。 – syonip
私はこの同じ問題を抱えています。 – Locane