在python单元测试中模拟`readlines()`

时间:2018-11-20 22:10:37

标签: python-3.x unit-testing python-mock

我正在尝试在python单元测试中模拟readlines()对象。到目前为止,我是

class Sample:
    def read_file(filename):
        with open(filename, "r") as f:
            lines = f.readlines()

我想为readlines()对象编写一个单元测试。 到目前为止,我已经提出了以下建议。

TEST_DATA = "test\ntest2\n"
@mock.patch("builtins.open")
def test_open(mock_open):
    mock_open.side_effect = [mock_open(read_data=TEST_DATA).return_value]
    assert mock_open.side_effect == Sample.read_file()

我的问题是,如何断言mock_open的返回值与read_file类中实际Sample函数的返回值相同?这是我失败的地方,无法继续前进。任何帮助对此表示感谢!预先谢谢你!

1 个答案:

答案 0 :(得分:0)

unittest.mock docs中有一个示例可以为您提供帮助

这是适用于您的代码的docs示例。

from unittest.mock import patch


class Sample:
    def read_file(filename):
        with open(filename, "r") as f:
            lines = f.readlines()
        return lines

TEST_DATA = "test\ntest2\n"
def test_open(mock_open):
    with patch('__main__.open', mock_open(read_data=TEST_DATA)) as m:
        s = Sample()
        res = s.read_file('foo')

    assert res == TEST_DATA