首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单元测试中修补本地JSON文件

在单元测试中修补本地JSON文件
EN

Stack Overflow用户
提问于 2022-02-25 21:02:05
回答 1查看 395关注 0票数 0

我有一些Python代码在本地JSON文件中加载:

代码语言:javascript
复制
with open("/path/to/file.json") as f:
    json_str = f.read()
    # Now do stuff with this JSON string

在测试中,我希望将该JSON文件修补为位于我的repo的测试目录("/path/to/repo/test/fake_file.json")中的JSON文件。

我该怎么做呢?

另一个要求是我实际上有一个本地版本的"/path/to/file.json",但我不想改变它。我想要它修补在测试时间,并在测试完成后未修补。

注意:我使用pytest,似乎插件pyfakefs会做到这一点。遗憾的是,我不知道如何将它修补到另一个本地文件中(从我的repo的测试目录中)。我对使用普通Python、3.10+和/或pyfakefs的解决方案持开放态度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-27 11:37:45

使用pyfakefs,您可以将真实文件映射到假文件系统中。在您的例子中,您可以使用文件

代码语言:javascript
复制
def test_json(fs):
    fs.add_real_file("/path/to/repo/test/fake_file.json",
                     target_path="/path/to/file.json")
    assert os.path.exists("/path/to/file.json")

这将将现有文件映射到假文件系统中的target_path (如果没有给出target_path,它将映射到与源文件相同的位置)。如果在同一个位置有一个真实的文件并不重要,因为真实的文件系统将在假文件系统中被忽略。如果您在测试代码中读取"/path/to/file.json",它将实际读取"/path/to/repo/test/fake_file.json" (映射文件仅按需读取)。

注意,默认情况下,文件只被映射为只读,所以如果要在测试代码中更改它,就必须在映射调用中设置read_only=False。这将使假文件系统中的文件可写,当然,对它的写入不会触及实际文件系统中的文件。

免责声明

我是俾法克厨师的贡献者。

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

https://stackoverflow.com/questions/71271694

复制
相关文章

相似问题

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