Почему при запуске Django тестов через ./manage.py не работают патчи?

У меня есть тестовый класс. Я используя метод patch переопределил одну функцию.
Когда я запускаю тест из PyCharm - нажав на кнопку - всё работает и вызывается моя, переопределённая функция.

Но когда я запускаю тот же самый тест, через команду python3 manage.py test - вызывается обычная, не пропатченная функция.

Как исправить, что бы работало в обоих случаях? Или хотя бы только через консоль?

UPD. Если явно указать какой класс запускать - то всё работает, если указать директорию - то нет
  • Вопрос задан
  • 35 просмотров
Пригласить эксперта
Ответы на вопрос 1
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Скорее всего, вы патчите что-то, что в случае вызова через manage.py импортится до того, как запатчится.
Скорее всего, вы пытаетесь пропатчить исходную сущность в сторонней либе (или даже стандартной), а надо патчить то, что импортируете к себе в модуль, сущность из которого тестируете.

Например, у вас есть ф-я mypackage.mymodule.foo, где используется urlopen из urllib:
from urllib.request import urlopen

def foo():
  ...

И для этой ф-и вы хотите написать тесты, запатчив вызов urlopen.
Потенциально нерабочий вариант:
@patch("urllib.request.urlopen")
def test(urlopen):
  ...

Точно рабочий вариант:
@patch("mypackage.mymodule.urlopen")
def test(urlopen):
  ...


UPD: а вообще, видеть бы код теста и самой тестируемой ф-и
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы