我以PosixPath這種方式進行了子類化:
from pathlib import PosixPath
class Node(PosixPath):
def __new__(cls, *args, mykwarg=None, **kwargs):
self = super().__new__(cls, *args, **kwargs)
self._mykwarg = mykwarg
return self
并添加了幾種@property方法。
現在,如果我想測驗它(我使用pytest),它不起作用:
def test_Node(fs):
fs.create_file('simple.txt')
n = Node('simple.txt')
n.stat()
運行測驗輸出(在第 行n.stat()):
E FileNotFoundError: [Errno 2] No such file or directory: 'simple.txt'
什么不是完全出乎意料的,因為,我猜,只有PosixPath修補pyfakefs,而不是我自己的類,即使它繼承自PosixPath.
但我希望能夠在保持pyfakefs. 讓繼承自的方法、欄位等PosixPath仍然按pyfakefs原樣修補PosixPath,并且只有我沒有添加的屬性沒有修補。有沒有辦法做到這一點?
uj5u.com熱心網友回復:
這里的問題是,它Node是PosixPath在加載時派生的,而pathlib尚未打補丁,因為打補丁是按模塊名稱完成的,所以不會打補丁。如果您想從 patched 派生它PosixPath,則必須在修補開始后重新加載類定義。當您使用時pytest,最好的方法可能是撰寫自己的夾具來做到這一點:
import pytest
from pyfakefs.fake_filesystem_unittest import Patcher
import node # assuming Node lives in node.py
@pytest.fixture
def my_fs():
with Patcher(modules_to_reload=[node]) as p:
yield p.fs
def test_Node(my_fs):
...
該modules_to_reload的說法是,這正是為這樣那樣的問題。
免責宣告:我是 pyfakefs 的貢獻者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314611.html
