如何在Python单元测试中模拟readlines()

时间:2018-03-17 14:47:58

标签: python-3.x unit-testing

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

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(.....)

包括健全性检查等。

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

我尝试这样的事情:

["foo\nbar\nxyzzy\n"]

问题是,当我查看f.data时,只有一个元素:

{{1}}

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

1 个答案:

答案 0 :(得分:1)

这不适用于班级名称

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):
         ...