我正在尝试将单元测试写入使用 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/