0

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

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 的测试目录中)。我对使用 vanilla Python 3.10+ 和/或pyfakefs.

4

1 回答 1

1

有了它pyfakefs,您就可以将真实文件映射到假文件系统中。在您的情况下,您可以使用add_real_file

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在映射调用中进行设置。这将使假文件系统中的文件可写,当然,写入它不会触及真实文件系统中的文件。

免责声明
我是 pyfakefs 的贡献者。

于 2022-02-27T11:37:45.653 回答