Python фиктивный патч не работает должным образом для публичного метода

Я пытаюсь исправить публичный метод для моего приложения фляги, но это, кажется, не работает.

Вот мой код в mrss.feed_burner

def get_feed(env=os.environ):
   return 'something'

И вот как я это использую

@app.route("/feed")
    def feed():
        mrss_feed = get_feed(env=os.environ)
        response = make_response(mrss_feed)
        response.headers["Content-Type"] = "application/xml"

        return response

И это мой тест, который он не разбирает.

def test_feed(self):
    with patch('mrss.feed_burner.get_feed', new=lambda: '<xml></xml>'):
        response = self.app.get('/feed')
        self.assertEquals('<xml></xml>', response.data)

1 ответ

Решение

Я считаю, что ваша проблема в том, что вы не исправляете правильное пространство имен. Смотрите документацию where_to_patch для unittest.mock.patch,

По сути, вы исправляете определение get_feed() в mrss.feed_burner но ваш взгляд обработчик feed() уже есть ссылка на оригинал mrss.feed_burner.get_feed(), Чтобы решить эту проблему, вам нужно исправить ссылку в вашем файле просмотра.

На основании вашего использования get_feed в вашей функции просмотра, я полагаю, вы импортируете get_feed вот так

view_file.py

from mrss.feed_burner import get_feed

Если это так, вы должны быть исправления view_file.get_feed вот так:

def test_feed(self):
    with patch('view_file.get_feed', new=lambda: '<xml></xml>'):
        ...
Другие вопросы по тегам