fox_12
@fox_12
Расставляю биты, управляю заряженными частицами

Как правильно сделать mockup для тестирования запроса?

Допустим у меня есть некая АПИ (сильно упрощено):
api.py:
from some.app import some_external_check

class SomeViewSet(GenericViewSet):
    ...
    @action(detail=False, methods=['POST'], permission_classes=(permissions.IsAuthenticated, ))
    def somefunc(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        result = some_external_check(serializer.validated_data)   # <-- вот тут надо пропатчить результат вызова на определенное значение
        ...
        # какие-то вычисления дальше
        return Response(someresult)


И я делаю тест для нее:
tests.py:
from unittest.mock import Mock, patch
from rest_framework import status
from rest_framework.test import APITestCase, APIClient

class SomeAPITest(APITestCase):
    ...
    def test_somefunc(self):
        my_client = APIClient()
        my_client.credentials(HTTP_AUTHORIZATION=f'Token {SOMETOKEN}') 
        ...
        response = my_client.post(reverse('some-url-for-somefunc-api'), data=data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        # тут тестирую результат вызова
        ...

Так вот - как с помощью Mock или любой другой библиотеки написать тест не внедряясь в сам код, чтобы патчился вызов функции some_external_check с возвратом некоторого определенного значения в целях дальнейшего тестирования?
И как это вообще правильно делается?
  • Вопрос задан
  • 375 просмотров
Пригласить эксперта
Ответы на вопрос 1
fox_12
@fox_12 Автор вопроса, куратор тега Django
Расставляю биты, управляю заряженными частицами
В общем - так как нет ответов - опишу один из используемых вариантов, может это кому поможет:

На тестовом запуске, помимо рабочих контейнеров, поднимался также контейнер с wiremock, который имитировал работу внешнего REST-сервиса, и основной проект подключался к нему на основе настроек полученных из переменных окружения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы