mock `readlines ()` в модульных тестах python - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь смоделировать объект readlines() в модульных тестах Python.Пока у меня есть

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 голосов
/ 24 ноября 2018

В unittest.mock 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
...