Невозможно имитировать subprocess.check_call

Я хочу написать тест для этой функции, высмеивая check_call (я не хочу, чтобы она вызывалась):

from subprocess import check_call

def foo_method():
    check_call(["ls"])
    print("hello")

Это тест:

import unittest.mock
from scripts import foo_method

@unittest.mock.patch("subprocess.check_call")
def test_foo_method(subprocess_check_call):
    foo_method()

Но функция check_call вызывается всегда и не издевается. Что не так с тестом?


person T.Poe    schedule 06.01.2021    source источник
comment
Вы должны исправить check_call, импортированный в ваш модуль, например. patch("mymodule.check_call") - см. где исправить, или, например, этот ответ дал на аналогичный вопрос.   -  person MrBean Bremen    schedule 06.01.2021
comment
Это тонкий момент, но foo_method использует scripts.check_call, а не subprocess.check_call. Оба имени относятся к одному и тому же базовому объекту, но patch оперирует именами, а не вещами, на которые они ссылаются.   -  person chepner    schedule 07.01.2021


Ответы (1)