Unit test

Nam Eun-Ji·2020년 11월 29일
0

UI testing / End to End testing
처음부터 끝까지 (db, 프론트, 백 다 연결시켜서) 직접 테스트해보는 것, 사람이 하는 것이기 때문에 느리고 비용이 많이 들지만 가장 직관적.

Integration testing
해당 서버만 테스트하는 것. (백엔드면 백엔드만, 프론트엔드면 프론트엔드만)

Unit test
코드를 테스트하는데 테스트하는 가장 작은 단위(함수)를 테스트

  • 내 코드를 테스트할 수 있는 코드를 짜는 것
  • 테스트 시간이 짧고, 반복적으로 실행 가능
  • unit test 전체가 몇분이 걸린다면 문제가 있는 것.
  • migration issue → 내가 짠 코드가 나중에 수정되었을 때 테스트 코드를 통과하지 못하면 나오는 이슈
  • 각 테스트는 독립적이어야함. 때문에 각 테스트에서 데이터가 생길 경우, 그 다음 테스트에서 문제가 생길 수 있기 때문에 데이터는 리셋되어야함.
  • 함수가 수정되었을 때 unit test가 변경되어야하는 경우는 대체적으로 매개변수가 변경되었거나, 리턴값의 변화가 생길 때.
  • 코드가 수정되었을 때마다 자동으로 유닛테스트를 실행시켜주는 라이브러리도 존재
  • CI/CD
  • 최상단 디렉토리에 파일 하나로 넣거나 모듈로 만들거나 앱당 하나씩 만들거나


Unit Test

  • 보통 django에서는 앱을 생성할 때마다 자동으로 앱 하나당 tests.py가 생성됨
  • unit test를 실행하기 위해서는 실제 로직에서 짰던 모듈도 다 import해야함
  • 테스트를 통과한다면 . 으로 표시되고, 실패에는 F, 에러시에는 E로 뜸.
  • setUp에서 목데이터를 생성하고, tearDown에서 데이터를 삭제함
from django.test import TestCase
from django.test import Client

class UserTest(TestCase):
    def setUp(self):
        # 목 데이터를 만들기 위한 메소드

    def test_nickname_check(self):
        # 실제 테스트 로직을 위해 생성되는 메소드(test_라고 시작하는 메소드는 모두 테스트 메소드가 됨)

    def tearDown(self):
        # 데이터 모델을 클리어하기 위한 메소드

실행방법

# manage.py가 있는 위치에서
python manage.py test user


unit test - GET

  • url을 명시해주고 쿼리스트링으로 인자를 넘겨주는 형태
  • response에 응답결과가 담김
from django.test import Client

client = Client()
response = client.get('url', {'json': 'json', 'json data': 'json data'})


unit test - POST

  • url을 명시해주고 data에 전달할 내용을 담아서 넘김
  • response에 응답결과가 담김
from django.test import Client

client = Client()
response = client.post('url', data={'json': 'json'})


response

아래처럼 response에 접근 가능

response.content
reponse.context['name']

content_type = 'application/json'일 때 .json.loads(), json()[]형태로 가져올 수 있음

response.json.loads()
response.json()['name']


assert method

참고 사이트 : https://wikidocs.net/16107

메소드설명
assertEqual(a, b)a == b
assertNotEqual(a, b)a != b
assertTrue(a)bool(a) is True
assertFalse(a)bool(a) is False
assertIs(a, b)a is b
assertIsNot(a, b)a is not b
assertIsNone(a)a is None
assertIsNotNone(a)a is not None
assertIn(a, b)a in b
assertNotIn(a, b)a not in b
profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글