Функция Pytest Django насмешливая APITestCase - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь создать тесты, включающие отправку запросов GET в мой API с помощью pytest-django, и мне нужна функция, используемая в представлениях, для имитации.

Я пробовал mocker из pytest-mock и unittest. mock.patch, и каждый раз, когда я высмеиваю эту функцию в каком-то тестовом примере, она остается и в других тестах.

Первый тестовый файл .py:

from unittest.mock import patch
from rest_framework.test import APITestCase
import pytest

@pytest.mark.django_db
class TestFirst(APITestCase):
    @classmethod
    def setUpClass(cls):
        cls.patcher = patch(app.views.function)
        cls.patcher.start()

    @classmethod
    def tearDownClass(cls):
        cls.patcher.stop()

    def test_something(self):
        get_data = self.client.get('/some/url')
        self.assertEqual(200, get_data.status_code)

, а затем проверка в совершенно другом файле .py:

from rest_framework.test import APITestCase
import pytest

@pytest.mark.django_db
class TestSecond(APITestCase):
    def test_something_else(self):
        get_data = self.client.get('/some/url')
        self.assertEqual(200, get_data.status_code)

При отладке первого тестового примера, метод исправлен правильно. Однако при запуске второго теста метод остается исправленным, а фиктивный объект сохраняет количество полученных вызовов.

Я что-то упустил?

РЕДАКТИРОВАТЬ: я пробовал оба исправления файла, гдеМетод определен и имя метода в представлениях, но всегда продолжает получать один и тот же результат.

EDIT2: Стоит отметить, что когда я меняю порядок тестов, второй завершается правильно, но первый не можетпоэтому метод пропатчен и вызывает его непропатченным, поэтому не удается.

1 Ответ

0 голосов
/ 10 ноября 2019

Я решил проблему с помощью суперкласса SimpleTestCase. Я до сих пор не знаю, почему это произошло, но, похоже, больше нет.

...