<TDD>
- 테스트코드 주도 개발
- 순서
- RED : 테스트 코드 작성(로직이 안 짜여 있으므로 당연히 실패함)
- GREEN : 기능이 동작하기 위한 코드 작성
- REFACTOR : 기능을 더 효율적으로 동작하게끔 수정하는 과정
<DRF로 테스트코드 작성하기>
- 회원가입 테스트
# users/tests.py
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
# users/tests.py
...
class UserRegistrationAPIViewTestCase(APITestCase):
def test_registration(self):
url = reverse("user_view")
- 회원가입이 제대로 되는지 확인하는 테스트코드를 작성 중이다
- url에는 users/urls.py 파일 안에 name이 user_view인 url이 담긴다
# users/urls.py
...
path('signup/', views.UserView.as_view(), name='user_view'),
...
# users/tests.py
...
user_data = {
"email":"test@test.test",
"password":"1234",
}
...
- 포스트맨에서 body-row-json 부분에 담기는 걸 user_data에 쓴다
# users/tests.py
...
response = self.client.post(url, user_data)
...
- response에는 클라이언트를 이용해서 url로 user_data를 post 요청을 보내면 돌아오는 응답이 담긴다
# users/tests.py
...
self.assertEqual(response.status_code, 201)
...
- response에 들어온 응답에 대한 상태 코드가 201과 같은지 비교한다
- 이제 터미널 창에 아래와 같이 쓰고 엔터를 누른다
python manage.py test
Found 1 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.447s
OK
Destroying test database for alias 'default'...
- 이렇게 뜨면 코드가 정상적으로 동작한다는 뜻이다
- 만약 email을 이메일 형식이 아니라 아이디 부분만 적고 테스트 해보면 어떻게 될까?
Found 1 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_registration (users.tests.UserRegistrationAPIViewTestCase.test_registration)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\l\Desktop\sparta\drf_project\users\tests.py", line 14, in test_registration
self.assertEqual(response.status_code, 201)
AssertionError: 400 != 201
----------------------------------------------------------------------
Ran 1 test in 0.030s
FAILED (failures=1)
Destroying test database for alias 'default'...
- 상태코드가 400이 나와서 test 실패했다고 뜬다 일부터 400 코드를 test 하고 싶은 거라면
# users/test.py
...
self.assertEqual(response.status_code, 400)
- 이렇게 바꾸면 test 성공으로 뜬다 이러나 저러나 400 코드가 잘 나오고 있다는 뜻이니 원하는 대로 회원가입 코드가 짜여졌음을 알 수 있다
- 에러 내용을 확인하고 싶으면 response 다음 줄에 print(response.data)를 하면 된다
# users/tests.py
...
class UserRegistrationAPIViewTestCase(APITestCase):
def test_registration(self):
url = reverse("user_view")
user_data = {
"email": "test@test.test",
"password": "1234",
}
response = self.client.post(url, user_data)
self.assertEqual(response.status_code, 201)