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

标签 python-3.x unit-testing

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

相关文章:

python - 查询维护外键关系的CSV文件?这可能吗?

unit-testing - 集成与单元测试

php - 插入单元测试后清理数据的最佳做法是什么

python-3.x - ModuleNotFoundError : No module named 'requests' . 但是 'requests' 已经安装

python-3.x - 如何在 fritzconnect 中发送 call_action

c# - 无法将单元测试添加到 .NET Core 单元测试项目 VS2017

python - 如何模拟 Python 静态方法和类方法

delphi - 如何在 PascalMock 中模拟具有开放数组参数的方法?

python - 如何对所有变量使用describe() by group?

python - SQLAlchemy - 经典 map 关系