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되지는 않는 것 같습니다.)

이를 해결하기 위해 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