首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持路径库(Posix)在子类化时由pyfak厨师修补的路径

保持路径库(Posix)在子类化时由pyfak厨师修补的路径
EN

Stack Overflow用户
提问于 2021-10-07 14:56:49
回答 1查看 113关注 0票数 1

我用这种方式对PosixPath进行了子类:

代码语言:javascript
复制
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),它不工作:

代码语言:javascript
复制
def test_Node(fs):
    fs.create_file('simple.txt')
    n = Node('simple.txt')
    n.stat()

运行测试输出(在n.stat()行):

代码语言:javascript
复制
E   FileNotFoundError: [Errno 2] No such file or directory: 'simple.txt'

并非完全出乎意料的是,我想只有PosixPath是由pyfakefs修补的,而不是我自己的类,即使它是从PosixPath继承的。

但是我希望能够在保持pyfakefs特性的同时测试我的类。继承自PosixPath的方法、字段等仍然由pyfakefs修补为PosixPath,并且只具有我添加的属性,而不是修补。有什么办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-07 18:22:31

这里的问题是Node是在加载时从PosixPath派生出来的,而pathlib还没有修补,而且它不会被修补,因为修补是通过模块名完成的。如果希望从修补程序PosixPath派生它,则必须在修补程序启动后重新加载类定义。在使用pytest时,最好的方法可能是编写自己的夹具:

代码语言:javascript
复制
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):
    ...

重新加载的论点正是针对这类问题的。

免责声明:我是俾法克厨师的贡献者之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69483331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档