pytest имеет этот пример в monkeypatching документы:Почему для monkeypatching os.path требуется аргумент path?
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'
Когда я удалить path
аргумент из функции mockreturn
, я получаю ошибку
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() работает без него. –