테스트 주도 개발(Test-driven development TDD)
: 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다.
개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다.
마지막으로 작성한 코드를 표준에 맞도록 리팩토링한다. 이 기법을 개발했거나 '재발견' 한 것으로 인정되는 Kent Beck은 2003년에 TDD가 단순한 설계를 장려하고 자신감을 불어넣어준다고 말하였다. (from 위키백과)
참고 문서 : TDD를 해야하는 이유
시작하기 전에 core
앱을 만들게요. 중앙관리자 역할을 하는 커맨드센터
녀석을 만드는 거에요.
share
하는 코드를 간직함$ python manage.py startapp core # 도커 컴포즈 안쓸때
or
$ docker-compose run app sh -c "python manage.py startapp core" # 도커컴포즈 쓸때
core앱 등록 settings.py에 해주는 거! 잊으면 안됩니다.
tests/test_models.py
파일 생성
orm
을 통해서 db에 데이터를 간단하게 만들어서 테스트할거에요.
from django.test import TestCase
from django.contrib.auth import get_user_model
class ModelTests(TestCase):
def test_create_user_with_email_successful(self):
'''Test creating a new user with an email is successful'''
email = 'test@example.com'
password = 'testpassword123'
user = get_user_model().objects.create_user(
email=email,
password=password,
)
self.assertEqual(user.email, email)
self.assertTrue(user.check_password(password))
check_password(raw_password)
는 raw_password를 받아 db에 암호화된 값과 비교하여 동일하면 True or False에요. 직관적이네요.
지금은 get_user_mode()
사용을 위한 커스텀 작업을 하지 않았기에 바로 테스트 적용을 할 수 없어요.
python mange.py test
돌리게 되면 fail나요.
user model을 정의하지 않았기 때문이에요.
그럼 커스터마이징하여 정의한 이후 통과시켜 봐야겠조?
to be continued