pytestはmonkeypatchingドキュメントでは、この例があります:os.pathのmonkeypatchingにパス引数が必要なのはなぜですか?
import os.path
def getssh(): # pseudo application code
return os.path.join(os.path.expanduser("~admin"), '.ssh')
def test_mytest(monkeypatch):
def mockreturn(path):
return '/abc'
monkeypatch.setattr(os.path, 'expanduser', mockreturn)
x = getssh()
assert x == '/abc/.ssh'
私はmockreturn
関数からpath
引数を削除すると、私はエラー
def getssh(): # pseudo application code
> return os.path.join(os.path.expanduser("~admin"), '.ssh')
E TypeError: mockreturn() takes 0 positional arguments but 1 was given
を取得し、私はそれが位置提供しているものを理解していません引数?
また、pathlib.Path.home()で同じことを再実装すると、この引数を持つことができません。path
が存在します。それ以外の場合は動作しません。残念なことに、このドキュメントでは、その不吉なpath
引数について何も言及していません。
ここでどのような魔法が起きているかは非常に参考になります。
ありがとう、私はちょうどクリックしていない/それは 'expanduser'はもちろんpathlib.Path.home()はそれなしで動作する一方、パスを提供する関数です。 –