Я пишу программу, которая создает subprocess.Popen
конвейер. Я пытаюсь смоделировать subprocess.Popen
таким образом, чтобы каждый вызов возвращал отдельный MagicMock
, чтобы я мог гарантировать, что методы будут вызываться для определенных (или всех) процессов в конвейере.
Я также хочу, чтобы этот макет был автоматически определен на основе subprocess.Popen
, но постоянно получаю сообщение об ошибке, что я не могу автоматически определить его на основе макета.
В настоящее время мой код выглядит следующим образом:
@pytest.fixture
def Popen(mocker: 'pytest_mock.MockFixture'):
def popen_factory(*args, **kwargs):
popen = mocker.MagicMock() # mocker.create_autospec(subprocess.Popen)
popen.stdin = open(os.devnull, "wb")
popen.stdout = open(os.devnull, "rb")
popen.wait.return_value = 0
return popen
Popen = mocker.patch.object(subprocess, 'Popen', autospec=True)
Popen.side_effect = popen_factory
yield Popen