首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟pathlib.Path.exists

模拟pathlib.Path.exists
EN

Stack Overflow用户
提问于 2021-05-13 00:04:09
回答 1查看 915关注 0票数 0

我的Python函数创建pathlib.Path对象。我想对此进行模拟,所以当代码调用pathlib.Path("/tmp/a").exists()时,它将得到True,而当代码调用pathlib.Path("/tmp/b").exists()时,它将得到False

我试过这个:

代码语言:javascript
复制
import pathlib
from unittest.mock import patch

def my_side_effect(*args, **kwargs):
    print (f" args = {args} , kwargs={kwargs}")
    return True

with patch.object(pathlib.Path, 'exists') as mock_exists:
    mock_exists.side_effect = my_side_effect
    print(pathlib.Path("a").exists())

输出:

代码语言:javascript
复制
 args = () , kwargs={}
True

正如你所看到的,我的副作用是没有任何基于路径的args/kwargs。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-14 06:48:28

您的示例运行正常,因为pathlib.Path.exists不带任何参数。您感兴趣的路径保存在Path对象中。

您可以不使用side_effect,只需使用自己的函数修补pathlib.Path.exists,该函数可以满足您的需要:

代码语言:javascript
复制
import pathlib
from unittest import TestCase
from unittest.mock import patch

def my_exists(self):
    # self is the Path instance, str(Path) returns the path string
    return str(self) == "a"

class MyTest(TestCase):
    def test_exists(self):
        with patch.object(pathlib.Path, 'exists', my_exists):
            self.assertTrue(pathlib.Path("a").exists())
            self.assertFalse(pathlib.Path("b").exists())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67512401

复制
相关文章

相似问题

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