mock.patch () Не исправляет функцию в вызове модуля, но находится в тестовой функции - PullRequest
0 голосов
/ 17 апреля 2020

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

Итак, в тесте у меня ниже

from unittest.mock import patch
from django.test import TestCase
from web.utils.registration import test_render_mock

class TestRenderMock(TestCase): 

    @patch("django.shortcuts.render")
    def test_render_mock(self, render_mock):
        request = self.make_request()

        # Calls render in same way in function below
        test_render_mock(request)

        from django.shortcuts import render
        r = render(request, 'c')
        print(type(r))

, который вызывает функцию в файле web / utils / registration.py

from django.shortcuts import render

def test_render_mock(request):
    r = render(request, 'registration/signup_link_error.html')
    print(type(r))

И это не издевается над вызовом рендеринга в функции test_render_mock , но оно есть в тестовой функции test_render_mock () . Вывод консоли ниже.

<class 'django.http.response.HttpResponse'>
<class 'unittest.mock.MagicMock'>

Понятия не имею, что я делаю не так. Буду признателен за любую помощь.

Использование python версии 3.8.2 и Django 3.0.5

ОБНОВЛЕНИЕ

Я использовал сторонний макет библиотеки, но теперь мы используем встроенную библиотеку tne unittest.

теперь для сторонней библиотеки вам нужно определить путь к модулю, куда она импортируется, вот так:

from unittest.mock import patch
from django.test import TestCase
from web.utils.registration import test_render_mock

MODULE_TESTING: str ='...'

class TestRenderMock(TestCase): 

    @patch(f"{MODULE_TESTING}.render")
    def test_render_mock(self, render_mock):
        request = self.make_request()

        # Calls render in same way in function below
        test_render_mock(request)

        from django.shortcuts import render
        r = render(request, 'c')
        print(type(r))
...