gpt4 book ai didi

python-3.x - 如何在 Python 单元测试中模拟 readlines()

转载 作者:行者123 更新时间:2023-12-03 22:17:24 25 4
gpt4 key购买 nike

我正在尝试将单元测试写入使用 readlines 从文件中读取的类 init:

class Foo:
def __init__(self, filename):
with open(filename, "r") as fp:
self.data = fp.readlines()

包括健全性检查等。

现在我正在尝试创建一个模拟对象,它可以让我测试这里发生的事情。

我尝试这样的事情:
TEST_DATA = "foo\nbar\nxyzzy\n"
with patch("my.data.class.open", mock_open(read_data=TEST_DATA), create=True)
f = Foo("somefilename")
self.assertEqual(.....)

问题是,当我查看 f.data 时,只有一个元素:
["foo\nbar\nxyzzy\n"]

这意味着无论发生什么,都没有分成几行,而是被视为一条。如何强制在模拟数据中发生换行?

最佳答案

这不适用于类名

with patch("mymodule.class_name.open",

但这将通过直接模拟内置函数来工作, builtins.open对于python3
@mock.patch("__builtin__.open", new_callable=mock.mock_open, read_data=TEST_DATA)
def test_open3(self, mock_open):
...

或者这个没有类通过模拟模块方法
 def test_open(self):
with patch("mymodule.open", mock.mock_open(read_data=TEST_DATA), create=True):
...

关于python-3.x - 如何在 Python 单元测试中模拟 readlines(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com