코드의 작동을 확인하는 루틴
(종류)
작은 세부사항에 적용 (Unit Test)
SW 전반적인 작동 검사 (Integration Test)
UI Test
자동화된 테스트?
시스템에 의해 테스트 집합을 한번 만든 다음
변경할때 앱에서 코드가 원래대로 작동하는지 확인
- "테스트를 통해 시간 절약"
구성요소가 변경되면 예기치 않은 결과 발생
자동화된 테스트를 통해 몇 초만에 이작업이
수행이 가능한지 코드를 식별하는데 도움
- "테스트는 문제를 식별할 뿐만 아니라 예방"
정확히 무엇을 하려하는지 파악하기 쉽다
- "테스트를 통해 더욱 매력적인 코드 만들기 가능"
제이콥 카플란 모스는 테스트가 없는 코드는 설계에 의해 손상이 된다 함
- "테스트는 팀이 함께 작업하는 데 도움"
복잡한 응용프로그램은 팀에서 유지관리
동료가 실수로 코드를 손상시키지 않도록 보장
장고 테스트 클라이언트 유무? 제공됨
테스트 파일의 이름은 test로 시작해야 하며
테스트 메소드는 반드시 'test'로 이름이 시작되어야 함
[시작]
app 내에 tests 폴더 만들기
[구성]
__init__.py / test_models.py / test_views.py / test_forms.py
[메서드 정의]
from django.test import TestCase
class TestClass(TestCase):
@classmethod
def setUpTestData(cls):
## setUpTestData()
클래스 전체에서 사용되는 설정을 위해
테스트 시작 때 딱 한번 실행
실행되면서 수정되거나 변경되지 않을 객체들을
이곳에서 생성 가능
def setUp(self):
## setUp()
각각의 테스트 메서드가 실해될 때마다 실행
내용이 변경될 수 있는 객체를 이곳에서 생성 가능
[실제 코드]
from django.test import TestCase
class YourTestClass(TestCase):
@classmethod
def setUpTestData(cls):
user = User.objects.create(name="Leo", age="20", height="180")
def test_is_student(self):
user_is_student = User.objects.get(name="Leo").is_student
# 기댓값과 결과가 같은지 비교하는 함수
self.assertEquals(user_is_student, False)
def test_is_adult(self):
age = User.objects.get(name="Leo").age
is_adult = age > 19
# 결과가 True 인지 확인하는 함수(반대, assertFalse())
self.assertTrue(is_adult)
Client() : django에서 제공, 서버를 실제로 실행 X => 클라이언트의 입장에서 GET, POST 등의 request를 보냄
json.dumps(obj) : 파이썬 객체를 json 문자열로 변환
[ 가입 테스트 ]
class SignUpTest(TestCase):
## User 값 만들기
def setUp(self):
self.client = Client()
User.objects.create(
name="Leo",
email="seoptware@git.com",
password="asdqwe123",
)
def clear(self):
User.objects.all().delete()
def test_success(self):
user = {
"email": "seoptware@git.com",
"name": "Leo",
"password": "asdqwe123",
}
response = self.client.post(
"/users/signup", json.dumps(user), content_type="application/json"
)
self.assertEqual(response.status_code, 201)
self.assertEqual(response.json(), {"MESSAGE": "SUCCESS"})
def test_duplication_user_fail(self):
user = {
"email": "seoptware@git.com",
"name": "Leo",
"password": "asdqwe123",
}
response = self.client.post(
"/users/signup", json.dumps(user), content_type="application/json"
)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json(), {"MESSAGE": "ALREADY_EXISTED_EMAIL"})
def test_email_format_error(self):
user = {
"email": "231assads.com",
"name": "Django",
"password": "asdqwe123",
}
response = self.client.post(
"/users/signup", json.dumps(user), content_type="application/json"
)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json(), {"MESSAGE": "EMAIL_ERROR"})
...