programing

Django에서 사용자와 요청을 모의하는 방법

nasanasas 2020. 11. 14. 10:16
반응형

Django에서 사용자와 요청을 모의하는 방법


요청 개체 또는 사용자 개체와 상호 작용하는 장고 코드가 있습니다. 예를 들면 다음과 같습니다.

foo_model_instance = models.get_or_create_foo_from_user(request.user)

django python 셸 또는 unittest로 테스트하려는 경우 거기에 무엇을 전달 하시겠습니까? 여기에서는 단순히 User 객체가 수행하지만 모의 요청 객체에 대한 필요성도 자주 나타납니다.

셸 또는 단위 테스트의 경우 :

  • 사용자를 어떻게 조롱합니까?
  • 요청을 어떻게 모의합니까?

요청을 위해 Django에 포함 된 RequestFactory를 사용 합니다.

from django.test.client import RequestFactory
rf = RequestFactory()
get_request = rf.get('/hello/')
post_request = rf.post('/submit/', {'foo': 'bar'})

@ozan 제안하고 아마와 같은 사용자를 위해, 나는 django.contrib.auth.models.User을 사용 공장 소년 속도 (공장 소년은 DB에 저장하지 않도록 선택할 수 있습니다)


사용자를 어떻게 조롱합니까?

django.contrib.auth.models.User개체를 초기화 합니다. User.objects.create_user쉽게 만들 수 있습니다.

요청을 어떻게 모의합니까?

django.http.HttpRequest개체를 초기화 합니다.

물론 원하는 작업에 따라 바로 가기가 있습니다. user사용자를 가리키는 속성을 가진 객체가 필요한 경우 , 무언가 (무엇이든)를 만들고 해당 속성을 부여하면됩니다.


Anurag Uniyal이 제안한대로 자신의 모의를 굴 리거나 모의 프레임 워크를 사용할 수 있습니다.

어쨌든 장고에서 하듯이 평범한 사용자를 만들 수 있다는 말에 대한 응답으로 ... 나는 이것이 단위 테스트의 요점을 무너 뜨릴 것을 제안합니다. 단위 테스트는 데이터베이스를 건 드리면 안되지만, 사용자를 생성함으로써 데이터베이스를 변경 한 것이므로 우리가 조롱하려는 이유가됩니다.


여기에서 모의 ​​객체에 대해 읽어보십시오.
http://en.wikipedia.org/wiki/Mock_object
http://www.mockobjects.com/

그리고이 python lib를 사용하여 http://python-mock.sourceforge.net/ 사용자를 모의합니다
.

그렇지 않으면 간단한 User 클래스를 직접 작성할 수 있습니다. 이것을 시작점으로 사용하십시오.

class MockUser(object):
    def __call__(self, *args, **kwargs):
        return self

    def __getattr__(Self, name):
        return self

특정 케이스 등 추가


테스트 내에서 하나만 만들 수 있으므로 사용자를 모의 할 필요가 없습니다. 데이터베이스는 테스트가 완료된 후 삭제됩니다.

요청을 모의 처리하려면 Simon Willison 의이 스 니펫사용 하세요 .

참고 URL : https://stackoverflow.com/questions/2036202/how-to-mock-users-and-requests-in-django

반응형