Я пытаюсь проверить функцию, которая вызывает subprocess.run
.Я хотел бы:
- Проверить, что
subprocess.run
вызывается с ожидаемыми аргументами - Сделать код выхода нулевым
С помощью следующего кода:
import subprocess
from unittest import mock
def test_foo(monkeypatch):
m = mock.Mock(spec=['run'], **{
'run.return_value.returncode': 0,
})
monkeypatch.setattr(subprocess, 'run', m)
assert subprocess.run is m
assert subprocess.run(['ls']).returncode == m.run(['ls']).returncode
Выполнение pytest
показывает:
assert subprocess.run is m
> assert subprocess.run(['ls']).returncode == m.run(['ls']).returncode
E AssertionError: assert <Mock name='mock().returncode' id='140293943645408'> == 0
E + where <Mock name='mock().returncode' id='140293943645408'> = <Mock name='mock()' id='140293943645352'>.returncode
E + where <Mock name='mock()' id='140293943645352'> = <Mock id='140293943644792'>(['ls'])
E + where <Mock id='140293943644792'> = subprocess.run
E + and 0 = <Mock name='mock.run()' id='140293943645184'>.returncode
E + where <Mock name='mock.run()' id='140293943645184'> = <Mock name='mock.run' id='140293943645128'>(['ls'])
E + where <Mock name='mock.run' id='140293943645128'> = <Mock id='140293943644792'>.run
Первое утверждение показывает, что m
и subprocess.run
являются одинаковыми макетами, но у первого returncode
0
, а у последнего returncode
- еще одна насмешка.Почему это?