26

Я пытаюсь решить, следует ли использовать Django Client или RequestFactory для проверки моих просмотров.Django test RequestFactory vs Client

Я создаю мой сервер с помощью DjangoRESTFramework, и это очень просто, до сих пор:

class SimpleModelList(generics.ListCreateAPIView): 
    """ 
    Retrieve list of all route_areas or create a new one. 
    """ 
    queryset = SimpleModel.objects.all() 
    serializer_class = SimpleModelSerializer 
    filter_backends = (IsOwnerFilterBackend,) 

    def perform_create(self, serializer): 
     serializer.save(owner=self.request.user) 

Каковы различия между тестирования с Джанго Client и RequestFactory и какой подход больше подходит для тестирования сервера REST (если есть какая-то разница, кроме того, что нравится лучше)?

Должен ли я создавать тесты для обоих, чтобы обеспечить лучшее покрытие для моей системы?

ответ

40

RequestFactory и Client имеют несколько очень разных прецедентов. Чтобы выразить это в одном предложении: RequestFactory возвращает request, а Client возвращает response.

RequestFactory делает то, что он говорит - это фабрика для создания объектов request. Ни больше ни меньше.

Client Используется для подделки полного цикла запроса-ответа. Он создаст объект request, который затем будет проходить через обработчик WSGI. Этот обработчик разрешает URL-адрес, вызывает соответствующее промежуточное программное обеспечение и запускает представление. Затем он возвращает объект ответа. Он имеет дополнительное преимущество, что он собирает много дополнительных данных на объекте response, который чрезвычайно полезен для тестирования.

RequestFactory фактически не трогайте ваш код, но request объекта может быть использован для тестирования частей коды, которые требуют действительного request. Client запускает ваши взгляды, поэтому, чтобы проверить ваши взгляды, вам нужно использовать Client и проверить ответ. Обязательно проверьте the documentation на Client.

+0

Благодарим вас за этот ответ. Не могли бы вы привести мне пример, где завод будет более подходящим для тестирования? –

+5

Если вы должны были создать нечто похожее на встроенный ['AuthenticationForm'] (https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm) , который в качестве первого аргумента принимает объект 'request', вы должны использовать' RequestFactory' для его проверки. – knbk

+4

Я не думаю, что для проверки представлений строго необходимо использовать «Клиент». Я видел код, который создает 'request' с' RequestFactory', а затем вызывает 'SomeView.as_view() (request)' для получения ответа. Но я пришел сюда, потому что не был уверен, что это лучший способ сделать это. Люди в другой проблеме говорят, что «Клиент» больше подходит для тестирования интеграции: http://stackoverflow.com/questions/5777447/test-django-views-that-require-login-using-requestfactory?rq=1 – Andy

 Смежные вопросы

  • Нет связанных вопросов^_^