Как исправить импортированную функцию только в выбранных методах класса? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть класс, который имеет два метода.Оба эти метода используют функцию запроса, импортированную из другого модуля.Как пропатчить функцию запроса только в одном из этих методов класса?

Я искал такую ​​тему, но не нашел ничего связанного.

module foo.py

from module import some_func

class A():
    def func_1():
        return some_func(x)
    def func_2():
        return some_func(y)

То, что я пробовал до сих пор: module test.py

from foo import A

with patch('foo.some_func'):
    A().func_1()
    A().func_2()    

, это исправит оба варианта использования some_func в func_1 иfunc_2, это верно?

from foo import A

with patch('foo.A.func_1.some_func'):
    A().func_1()
    A().func_2()    

И эта ошибка выдает, что func_1 не имеет атрибута some_func (что понятно).

и я хотел бы исправитьиспользование some_func только в func_1.

1 Ответ

3 голосов
/ 01 апреля 2019

Я не думаю, что это возможно. Исправление работает путем замены символов во всем модуле, поэтому при замене some_func на A исправляются все экземпляры some_func.

Вы можете обойти это, импортировав some_func дважды - с двумя разными именами

from foo import some_func
from foo import some_func as some_func_two

Теперь используйте some_func в func_1 & some_func_two в func_2. Теперь вы можете пропатчить some_func во время теста, а func_2 должен использовать другой метод. Хотя я бы посоветовал против этого - изменить реальный код для тестирования запахов, как будто вы должны вместо этого рефакторинг вашего кода.

...