我用这种方式对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,并且只具有我添加的属性,而不是修补。有什么办法吗?
发布于 2021-10-07 18:22:31
这里的问题是Node是在加载时从PosixPath派生出来的,而pathlib还没有修补,而且它不会被修补,因为修补是通过模块名完成的。如果希望从修补程序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):
...重新加载的论点正是针对这类问题的。
免责声明:我是俾法克厨师的贡献者之一。
https://stackoverflow.com/questions/69483331
复制相似问题