Python Mock - имитация нескольких открытых

Прочитав это: Как имитировать open, используемое в операторе with (используя Имитация фреймворка в Python)?

Я могу имитировать функцию open в Python, используя:

with patch(open_name, create=True) as mock_open:
    mock_open.return_value = MagicMock(spec=file)
    m_file = mock_open.return_value.__enter__.return_value
    m_file.read.return_value = 'text1'

    diffman = Diffman()
    diffman.diff(path1, path2)

Он хорошо работает, когда мой тестируемый метод использует один оператор open. Вот мой проверенный метод:

def diff(self, a, b):
    with open(a, 'r') as old:
        with open(b, 'r') as new:
            oldtext = old.read()
            newtext = new.read()

Значения oldtext и newtext одинаковы (здесь 'text1').

Я хотел бы иметь «text1» для старого текста и «text2» для нового текста.

Как я могу это сделать?

6
задан Community 23 May 2017 в 12:14
поделиться