wafflestudio/seminar-2020

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

Aperta

#228 aperta il 3 ott 2020

 (2 commenti) (1 reazione) (0 assegnatari)Python (49 fork)auto 404
HW3backendgood first issuequestion

Metriche repository

Star
 (27 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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

Guida contributor