wafflestudio/seminar-2020

TEST DB에서 Client class 내부 함수들의 path에 대한 질문

Open

#228 opened on Oct 3, 2020

 (2 comments) (1 reaction) (0 assignees)Python (49 forks)auto 404
HW3backendgood first issuequestion

Repository metrics

Stars
 (27 stars)
PR merge metrics
 (PR metrics pending)

Description

PUT /api/v1/seminar/{seminar_id}/ API의 test code를 짜던 중 질문이 생겼습니다.

주의 : PostSeminarTestCase, PutSeminarTestCase의 Class 이름은 직접 작명한 것입니다.

우선 아래 사진을 보시면 PutSeminarTestCase Class의 setUp 함수에서 생성한 seminar 전체를 불러오는데, id가 3인 것을 알 수 있습니다.

이에 대해 앞서 정의한 PostSeminarTestCase Class에서 2개의 Seminar를 정의하여 1, 2가 id로서 할당된 후 새로운 Class로 넘어오면서 해당 row들이 지워진 다음 id =3부터 새로운 row가 만들어지는 것을 확인했습니다. (#114 에서도 언급된 바를 통해 유추해보자면 class가 바뀔 때마다 db가 아예 drop되지는 않는 것 같습니다.)

image

이를 해결하기 위해 test간의 독립성을 유지하기 위해 tearDown() 메소드를 현재 수행하고자 하는 PutSeminarTestCase 바로 직전의 PostSeminarTestCase Class의 마지막에 정의해주었음에도 똑같이 id가 3부터 할당되었습니다.

어쩔 수 없이 Seminar.objects.last().id를 path에 format으로 넣어주는 방식을 택했으나 (물론 잘 작동되지만) python을 이용한 방식이 아닌 다른 방식이 없나 질문드리게 되었습니다.

참고 :

Client Class의 put method의 path argument
class Client(ClientMixin, RequestFactory):
    def __init__(self, enforce_csrf_checks=False, raise_request_exception=True, **defaults):
        super().__init__(**defaults)
        self.handler = ClientHandler(enforce_csrf_checks)
        self.raise_request_exception = raise_request_exception
        self.exc_info = None
        self.extra = None

    ...

    def put(self, path, data='', content_type='application/octet-stream',
            follow=False, secure=False, **extra):
        """Send a resource to the server using PUT."""
        self.extra = extra
        response = super().put(path, data=data, content_type=content_type, secure=secure, **extra)
        if follow:
            response = self._handle_redirects(response, data=data, content_type=content_type, **extra)
        return response

Contributor guide