작은 규모의 회사이다보니 아직 unit test가 없다.
규모가 더 커지기 전에 만들기 시작하는게 좋은 것 같다는 의견은 항상 있었지만
막상 우선 순위가 있는 task들을 하다보면 unit test를 만들기가 쉽지 않았다.
큰 규모의 업데이트가 끝나고 각자 해보고 싶은 프로젝트에 대한 이야기를 나눴는데
나는 아무래도 해본 적이 없었던걸 배워보고 싶어서 Unit test라고 말했다.(막상 해보니 넘나 어려운 것...또르르...)
테스트 코드를 작성해본 경험이 없고
몇달 전 사수분이 이직하셔서 회사에 백엔드가 나밖에 없는 상황에서
조언을 구할 곳이 많이 없는 점이 어려웠다.
그래도 다행히 이직한 사수분이 일주일에 한번씩 멘토링을 해주셔서 궁금한 점들을 여쭤볼 수 있었다.
FYI. Django, python, rest framework의 test를 활용했다
목표: Unit test 코드 작성
기간: ?
한번도 해본 적이 없던 일이다보니 목표 기간을 정하기가 쉽지 않았다.
우선 한 프로젝트를 세분화 해서 기존 코드에서는 account 관련 url들 먼저 작성해보고
만약 앞으로 새로운 view를 작성하게 된다면 unit test코드를 함께 작성하기로 했다.
세분화된 목표: account 폴더 안에 있는 코드들을 위한 unit test 작성
기간: 우선 2주(다른 task들도 함께 하지만 unit test의 우선 순위를 조금 더 높게 잡았다)
궁금했던 점 1.
처음에 헷갈렸던 점은 unit test 의 범위다.
test에는 unit test, integration test, functional test가 있는데 정의를 살펴보기 위해 아래의 글을 참고했다.
https://www.softwaretestinghelp.com/the-difference-between-unit-integration-and-functional-testing/
궁금했던 점 2.
dependency는 어떻게 해소해야 하나?
예를 들어 current-user를 불러오는 view는 로그인을 해야 제대로 불러와지고
로그인을 안한 상태면 401(Auth error)이 뜬다.
그러면 APIClient().get(url) 의 값이 401일텐데 이렇게 하는게 맞는건가?
더 찾아보니(위의 링크에 있는 글에서도 나온다)
Unit test means testing individual modules of an application in isolation (without any interaction with dependencies)
-> Unit test에서는 각각의 모듈을 독립적으로(의존성 없이) test해야 하는 거였다.
이직하신 사수분과 이야기를 해보다가
우선 end point의 response 부분만 테스트 하는 것을 자동화 해보고
그 이후에 차근차근 build up 해보는건 어떻겠냐는 제안을 해주셨다.
view 하나하나마다 test 클래스를 만드는게 막막했는데
우선 자동화 해두면 편할 것 같고 다른 프로젝트에도 사용할 수 있을 것 같아서
그렇게 해보기로 했다.
새로운 목표: 프로젝트 전체의 end point의 response를 테스트를 자동화 하기.
예를 들어
urlpatterns = [
path('crrent-user/', general.current_user_view),
path('languages/', general.language_view),
]
이런식의 url들이 있다면
1. 새로운 test file을 만들고
2. response를 받아오는 test class를 만드는 것까지만 우선 자동화하는 것이다.
class TestCurrentUserView(APITestCase):
print("CurrentUserView")
url = "/current-user/"
get_response = APIClient().get(url)
patch_response = APIClient().patch(url)
def test_status_code(self):
self.assertEqual(self.get_response.status_code, 401)
self.assertEqual(self.patch_response.status_code, 401)
코드블럭 안에 인덴트가 안맞는게 매우 거슬리지만ㅠㅠ
우선 위와 같은 결과를 목표로 했다.
글이 너무 길어지는 것 같아서 이후의 이야기는 다음편에 이어서 작성해야겠다.
'TIL' 카테고리의 다른 글
도커 레지스트리 (0) | 2021.09.06 |
---|---|
Week3 도커 이미지 (0) | 2021.09.03 |
week2 도커엔진 (0) | 2021.08.19 |
도커 기초 week 1 (0) | 2021.08.11 |
Django model on_delete (0) | 2021.04.22 |