You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承pathlib.PosixPath的自定义类如何使用pyfakefs正常完成测试

问题根因

问题的根因确实是pyfakefs默认仅对原生的PosixPath/Path类做了方法补丁,自定义子类不在默认适配范围内,调用继承自原生类的IO相关方法时会直接访问真实文件系统,导致找不到测试用的模拟文件。


解决方案

pyfakefs 提供了官方API add_pathlib_cls 用于注册自定义的Path子类,注册后所有子类实例继承自原生Path的方法都会走fake文件系统逻辑,自定义的属性和方法不受影响,完全符合你的需求。

方案1:单测试用例内注册

仅当前测试用例需要用到Node类时,直接在测试内注册即可:

def test_Node(fs):
    # 先注册自定义Node类到pyfakefs适配列表
    fs.add_pathlib_cls(Node)
    fs.create_file('simple.txt')
    n = Node('simple.txt')
    n.stat() # 执行正常

方案2:全局fixture统一注册

如果多个测试用例都需要用到Node类的测试,可以封装独立fixture避免重复注册:

import pytest
# 替换为你自己的Node类导入路径
from your_module import Node

@pytest.fixture
def fs_with_node(fs):
    fs.add_pathlib_cls(Node)
    yield fs

后续测试直接使用该fixture即可:

def test_Node(fs_with_node):
    fs_with_node.create_file('simple.txt')
    n = Node('simple.txt')
    assert n._mykwarg is None # 自定义属性不受影响
    n.stat()

内容的提问来源于stack exchange,提问作者zezollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:15:05