У меня есть модуль Python, содержащий следующие строки
import subprocess
# command that write things to a file in a specific location
command = 'default_command'
def f():
proc = subprocess.Popen(command, ..some_args..)
status_code = proc.wait()
error_code = proc.stderr.read()
# some stuff with status_code, error_code and the content of the file
При нормальном выполнении command записывает данные в файл и возвращает код выхода.
Я хочу написать модульный тест для этой функции с pytest и pytest-mock, который должен имитировать command, который я выполняю с Popen. Мне нужно издеваться над этой командой, потому что она дает не очень предсказуемый результат. Макет должен делать две вещи:
Как этого добиться?
Пожалуйста, дайте мне знать, даже если вы думаете, что я неправильно отношусь к этому.
Потому что f() - это оболочка Python для другой программы. Мне нужно протестировать оболочку Python, а не другую программу
Я бы выбрал mocker.patch('subprocess.Popen), wait() и read(), получил бы тестовую функцию для записи ожидаемого результата, но не уверен, что он даже близок к тому, что вы ожидаете.






it has some not-well predictable output, то программаcommandбудет тесетом, зачем тестироватьf()? Если вы заинтересованы в тестировании кода выхода, связанного с..some_args.., то это отдельная история, или интерес только в синтаксическом анализе выходного файла.