테스트 코드의 작성은 한편으로 굉장히 크게 다가왔다.
아는 지인 개발자 분에게 들었는데, 아예 테스트 코드가 없으면
개발을 한 게 아니라고 본다고 하였다.
그렇다보니 스스로 테스트코드에 대해서 관심을 가졌으나,
직접 사용해보지 못하고 있었다.(물론 나의 학습 부족이 제일 컸다.)
앞으로는 이런 부분에 대해서 더 이상 미루지 않고
학습해서 부딪쳐보기로 하였다.
django에서 혹은 개발에서 테스트의 종류는 크게 3가지로 분류하고 있다.
참고 ( [Django 튜토리얼 파트 10: Django 웹 어플리케이션 테스트하기 - Web 개발 학습하기 | MDN](https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Testing))
- unit test(유닛테스트)
- 독립적인 class와 function 단위의 테스트
- Regression test(버그 수정 테스트)
- 발생하였던 버그에 대한 수정 테스트
- Integration test(통합테스트)
- 유닛 테스크를 완료한 각각의 독립적인 컴포넌트들이 함께 결합하여 수행하는 동작을 검증한다. 각 컴포넌트들의 내부적인 동작까지는 검증할 필요가 없다.
- 해석해보면 비즈니스 로직에 대한 검증인거 같다
구조
app / tests /
__init__.py
test_models.py
test_forms.py
test_views.py
=> app아래에 tests라는 폴더를 만들고
해당 폴더 아래에 test관련된 파일들을 만든다.
실행
from django.test import TestCase
class YourTestClass(TestCase):
@classmethod
def setUpTestData(cls):
print("setUpTestData: Run once to set up non-modified data for all class methods.")
pass
def setUp(self):
print("setUp: Run once for every test method to setup clean data.")
pass
기본적으로 TestCase를 상속받아 만든 클래스는 2개의 메쏘드를 정의한다.
- setUpTestData() 는 클래스 전체에서 사용되는 설정을 위해서 테스트 시작 때 딱 한 번만 실행됩니다. 테스트 메쏘드가 실행되면서 수정되거나 변경되지 않을 객체들을 이곳에서 생성할 수 있습니다.
- setUp() 은 각각의 테스트 메쏘드가 실행될 때마다 실행됩니다. 테스트 중 내용이 변경될 수 있는 객체를 이곳에서 생성할 수 있습니다 (모든 테스트 메쏘드는 방금 막 생성된 ("fresh") 오브젝트를 입력받게 됩니다).
test코드 작성
from django.test import TestCase
class YourTestClass(TestCase):
@classmethod
def setUpTestData(cls):
member = Member.objects.create(name='byeonguk')
def test_name_label(self):
first_member =Member.objects.get(name='byeonguk').first_name
self.assertEquals(first_name, 'first name')
def test_age_bigger_19(self):
age = Member.objects.get(name='byeonguk').age
check_age = age > 19
self.assertTrue(check_age)
- 체크해주는 함수
- self.assertEquals => 생각한 값과 같은지 체크해주는 함수
- self.assertTrue(True) => () 안의 값이 True인지 체크
- self.assertFalse(False) => () 안의 값이 False인지 체크
test코드 실행
python3 manage.py test
test코드 더 많은 정보 출력하기
python3 manage.py test --verbosity 2
- verbosity 는 기본적으로 1이며, 0,1,2,3으로 조절가능
test코드 일부만 실행하기
- 테스트 중 일부만 실행하려면 패키지, 모듈, TestCase 서브클래스, 메서드의 전체 경로를 지정해주면 됩니다.
# Run the specified module
python3 manage.py test catalog.tests
# Run the specified module
python3 manage.py test catalog.tests.test_models
# Run the specified class
python3 manage.py test catalog.tests.test_models.YourTestClass
# Run the specified method
python3 manage.py test catalog.tests.test_models.YourTestClass.test_one_plus_one_equals_two
일단 어느정도 정리는 하였으니깐, 이제는 직접 작성해보면서 테스트를 해봐야겠다.
'Django' 카테고리의 다른 글
Django 검색 기능 구현 및 고도화 하기 (0) | 2022.11.09 |
---|---|
django many to many를 id로 정렬하는 방법 (0) | 2021.03.17 |
django에서 vue사용하기 (0) | 2021.02.23 |
Django Static file download 경로 만들기 (0) | 2020.09.28 |
주니어 개발자의 Django ORM 수난기 (5) | 2020.07.21 |