test.py
가 생성된다. $ python manage.py test
from django.test import TestCase
class TestView(TestCase):
def test_two_is_three(self):
self.assertEqual(2, 3)
from django.test import TestCase
class TestView(TestCase):
def test_two_is_two(self):
self.assertEqual(2, 2)
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
class UserRegistrationAPIViewTestCase(APITestCase):
def test_registration(self):
# user_view라는 name을 가진 url을 자동으로 가져와 변수에 저장해줌
url = reverse("user_view")
user_data = {
"username" : "user10",
"fullname" : "user10",
"email" : "user10@naver.com",
"password" : "1010"
}
# client는 APITestCase에서 자동으로 생성해준다.
# client를 이용해서 post를 보내고, 아래의 url로 user_data를 보내주고 결과를 response에 담아준다.
response = self.client.post(url, user_data)
self.assertEqual(response.status_code, 200)
위의 코드를 입력한 후, python manage.py test
를 하게 되면 아래와 같이 성공 메세지를 볼 수 있다.
이번에는 하나의 값을 일부러 빼서 결과를 확인해 보도록 하겠다.
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework import status
class UserRegistrationAPIViewTestCase(APITestCase):
def test_registration(self):
# user_view라는 name을 가진 url을 자동으로 가져와 변수에 저장해줌
url = reverse("user_view")
user_data = {
"username" : "user10",
"fullname" : "user10",
# "email" : "user10@naver.com",
"password" : "1010"
}
# client는 APITestCase에서 자동으로 생성해준다.
# client를 이용해서 post를 보내고, 아래의 url로 user_data를 보내주고 결과를 response에 담아준다.
response = self.client.post(url, user_data)
# 우리가 views.py의 회원가입 부분의 Response에 값을 담아놓았기 때문에 프린트를 찍으면 어디서 에러가 났는지 알 수 있음
print(response.data)
self.assertEqual(response.status_code, 200)
Response에 실린 메세지
를 확인할 수도 있고, 만약 Response에 내가 user의 데이터를 실어서 반환
하고 있다면 그 반환값도 비교를 통해 코드가 올바르게 작성되었는지 알 수 있다. (더 많은 것들을 할 수 있다!)class UserRegistrationTest(APITestCase):
def test_registration(self):
# user_view라는 name을 가진 url을 자동으로 가져와 변수에 저장해줌
url = reverse("user_view")
user_data = {
"username" : "user10",
"fullname" : "user10",
"email" : "user10@naver.com",
"password" : "1010"
}
# client는 APITestCase에서 자동으로 생성해준다.
# client를 이용해서 post를 보내고, 아래의 url로 user_data를 보내주고 결과를 response에 담아준다.
response = self.client.post(url, user_data)
# 우리가 views.py의 회원가입 부분의 Response에 값을 담아놓았기 때문에 프린트를 찍으면 어디서 에러가 났는지 알 수 있음
# print(response.data)
self.assertEqual(response.status_code, 200)
def test_login(self):
url = reverse("token_obtain_pair")
user_data = {
"username" : "user10",
"fullname" : "user10",
"email" : "user10@naver.com",
"password" : "1010"
}
response = self.client.post(url, user_data)
print(response.data)
self.assertEqual(response.status_code, 200)
401
에러가 나왔다. unit test
의 관점에서 작성해야 한다. 하나의 테스트가 다른 테스트에 의존해서는 안 된다. (stateless)class ExampleOfUnitTest(APITestCase):
def test_A_the_B(self):
self.TestA()
self.TestB()
...
setUp()
method가 존재한다. setUp()
은 테스트 코드가 진행되게 전에 반드시 먼저 작성해주어야 한다. tearDown()
으로 작성해주면 된다.class LoginUserTest(APITestCase):
def setUp(self):
self.data = {'username': 'user10', 'password': '1010'}
self.user = User.objects.create_user('user10', '1010')
def test_login(self):
response = self.client.post(reverse('token_obtain_pair'), self.data)
print(response.data["access"])
self.assertEqual(response.status_code, 200 )
우리가 작성한 views.py 같은 파일
에 한해서만 해야 한다는 것이다. django의 라이브러리나 내장 함수에 대해서 테스트를 하는 것이 아니다.