코드의 기능과 동작을 테스트하는데 사용되는 코드를 일컫는 말입니다. 테스트를 진행하며 오류를 잡아내고 수정하는 과정이 매우 중요합니다.
TDD는 테스트 주도 개발을 뜻하는 개발 방법론 중 하나로, 선 개발 후 테스트를 하는 방식이 아닌 선 테스트 후 개발 방식의 개발 방법론 입니다.
from django.test import TestCase
class TestView(TestCase):
def test_two_is_three(self):
self.assertEqual(2, 3)
def test_two_is_two(self):
self.assertEqual(2, 2)
위의 코드는 숫자 2개를 비교해 같으면 통과하고 아니면 통과하지 못하게 만들어져 있습니다.
위의 코드는 장고에서 제공하는 모듈을 사용한 것이고 그외에도 python의 유닛 테스트 drf의 APItestcase 등이 있습니다.
간단하게 drf에서의 테스트 코드를 살펴보자면
class UserRegistrationTest(APITestCase):
def test_registtration(self):
url = reverse("user_view")
user_data = {
"email":"testman@naver.com",
"password":"0000",
}
response = self.client.post(url, user_data)
self.assertEqual(response.status_code, 201)
위의 코드를 예시로 들 수 있는데 테스트를 위한 클래스가 있고 그 안에 함수들이 동작하며 테스트를 진행하게 됩니다. 위의 경우 user_view
라는 이름을 가진 url을 가지고와 사용하고 있고 reverse
는 해당 url이 코드 작성도중 수정이 되더라도 상관없이 테스트 할 수 있게 해줍니다.
해당 코드는 회원가입 테스트코드로 회원가입에 성공해 201코드가 출력되면 통과할 수 있게 만들었습니다.
그리고 그 뒤에이어서 게시글과 댓글 등을 로그인 한 상태로 테스트를 하고 싶어도 위에 가입한 회원정보로는 테스트를 할 수 없습니다. 테스트코드에서 함수들은 테스트가 끝나면 모든 데이터들을 비워버리기 때문입니다. 따라서 회원가입이나 로그인 기능 등 기본으로 전제를 만들고 테스트를 하고 싶다면 다른 방법을 강구해야합니다.
def setUp(self):
self.data = {"email":"testman@naver.com", "password":"0300"}
self.user = User.objects.create_user("testman@naver.com", "0300")
위와 같이 setUp
을 함수명으로 사용하면 drf에서 자동으로 이 결과들을 전역함수처럼 사용하게 만들어 줄 수 있습니다.