[TIL] Unit Test (Django활용)

김성진·2020년 10월 10일
0
post-thumbnail

유닛테스트란..?

작성한 코드의 가장 작은 단위인 함수를 테스트하는 메소드이다. 작성한 로직을 테스트하는 유닛테스트 코드를 짜서 테스트하게 한다. 실용적이다. 예를 들어, 테스트할 엔드포인트가 10개 넘을때 httpie나 포스트맨으로 테스트하면 최소 수분은 걸릴 것을, 유닛테스트로 돌린다면 수 초만에 끝낼 수 있게 된다.

Unit Test 작성하기

파이썬에서는 유닛 테스트를 할 수 있는 unittest 모듈이 있다. 먼저 테스트할 함수를 작성해 보겠습니다. 내 컴퓨터에서 mycalc.py를 만들고 다음 코드를 입력해보자.

def add(a, b):
	return a+b

def substract(a, b):
	return a-b
import unittest
import mycalc

class MyCalcTest(unittest.TestCase):
	def test_add(self):
    	c = mycalc.add(20, 10)
        self.assertEqual
    
    def test_substract(self):
    	c = mycalc.add(20, 10)
        self.assertEqual(c, 10)

if __name__ == '__main__':
	unittest.main()

코드를 실행하기전에 위의 유닛 테스트 코드를 먼저 분석해보면, unittest 모듈을 임포트 해왔고 MyCalcTest라는 클래스를 만들고 unittest 모듈의 TestCase를 상속 받는다. 그리고 class 안에 mycalc의 add를 테스트하는 test_add 함수와 test_substract 함수를 작성.

2차 프로젝트 user앱의 views.py 유닛테스트 코드:

import json

import bcrypt

from .models        import User, SNS, Creator, CreatorSNS
from django.test    import TestCase
from django.test    import Client
from unittest.mock  import patch, MagicMock

class KakaoSignInTest(TestCase):

    def setUp(self):
        User.objects.create(
            email = 'something@gmail.com'
            name  = 'someone thx'
        )
    
    def tearDown(self):
        User.objects.all().delete()
    
    def test_kakaosignin_post_success(self):
        client = Client()
        user = {
            'email' : 'something@gmail.com'
            'name'  : 'someone thx'
        }
        response = client.post('user/signin/kakao/callback', json.dumps(user), content_type='application/json')

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.json(),
            {
                'message':'SUCCESS'
            }
        )
    
    def test_kakaosignin_post_duplicated_name(self):
        client = Client()
        user = {
            'email' : 'something@gmail.com'
            'name'  : 'someone else'
        }
        response = client.post('user/signin/kakao/callback', json.dumps(user), content_type='application/json')

        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.json(),
            {
                'message' : 'DUPLICATED_NAME'
            }
        )
    
    def test_kakaosignin_post_invalid_keys(self):
        client = Client()
        user = {
            'email'    : 'something@gmail.com'
            'nickname' : 'someone thx'
        }
        response = client.post('user/signin/kakao/callback', json.dumps(user), content_type='application/json')

        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.json(),
            {
                'message' : 'INVALID_KEYS'
            }
        )

profile
multi-national communicator with programming (back-end)

0개의 댓글