2차 프로젝트에 들어서면서, 필수로 진행하게 된 유닛테스트.
다른 사람들은 코드를 어떻게 작성해야할지 모르겠다고들 한다.
하지만 나의 경우는?
코드가 어떻게 작성되었는지도 확인하지 못한 상태였다 🥵
계속해서 발생하는 이상한 에러때문에..!!!!
제일 처음 발생했었던 에러는 ImportError
/ ModuleNotFountError
였다.
👉🏻 ImportError/ModuleNotFoundError
정말 이상하게도, import 해와야 할 user app
의 경로를 module
로 인식하며, 해당 모듈이 없다는 에러를 계속 반환했다.
검색해보니 프로젝트 최상위 디렉토리의 __init__.py
를 삭제하라는 말 뿐이었다.
이게 정말 될까, 하면서 삭제했는데 왠걸. 정말 되는 것이 아닌가.
python -m unittest --v
난 👆🏻 요 명령어를 통해서 테스트를 실행하고있었는데.
단순히 OK 라고 뜨는 것만 확인하고 넘겼었다.
생각해보니, test가 성공했다는 표시인 마침표도 없었고 애초에 Ran 0 tests
라고 뜨고있는데!!!
도대체 왜 테스트가 성공하고있었다고 생각한건지 모르겠다 하핳
사실 unittest
는 파이썬
의 유닛테스트 모듈인데, 나는 dJango
의 TestCase
를 통해서 유닛테스트를 진행해야 하는 상황.
그런데 파이썬
의 unittest
를 사용하고있으니..
애초에 맞지 않는 옷을 찾아놓고 "입으면 맞을거야!" 라고 생각하고 있었던 격..
python manage.py test user.tests
TestCase
를 사용하는, 올바른 명령어를 입력하니 새로운 에러가 발생하기 시작했다.
다시 시도 할 때마다, 내가 마주했던 에러는
no such table exists
이러한 에러들...
도대체가 이해 할 수가 없었다.
model
도 모두 import 해왔는데, 테스트 데이터베이스도 생성이되는데 왜 테이블만 생성이 안되는 것인가
멘토님들께 질문드렸더니, 공식 문서를 찾아보시면서 도와주셨는데, 그래도 정말 원인을 파악할 수 없었다.
👉🏻 Testing tools (Django documentation)
but 역시나 우리의 멘토님께서는 늘 해답을 알고 계시는데, 그 이유가 정말 충격적이었다.
우선, 나의 상황은 이렇다.
- 나는 현재 단 한번도
migrate
를 한적이 없다.
👉🏻 현재 프로젝트는AWS
의RDS
서비스를 통해 원격 DB를 두고 사용하고 있기 때문!
- 내가 아닌 다른 팀원이 계속해서
migrate
를 진행하고, 나는 하지 않기로 했다.
👉🏻 만에 하나 내가 migrate 파일을 가지고 있을 경우에git pull
을 받으면
계속해서conflict
가 발생하고, 로컬 데이터베이스를 날려야 하기 때문!!
프로젝트를 진행하는 내내 여러 팀원들이 하나의 DB로 작업을 하니 안정적인 채로 작업할 수 있어서 너무 좋았는데,
이게 내 유닛테스트를 막는 원인이었다.
내 로컬에 생성된 migration 파일 자체가 없으니, migrate를 할 테이블 관련 정보가 없는 것!
내 로컬에 migration 파일을 생성해둔 뒤 유닛테스트를 진행하니 그제서야 정상적으로 테스트가 진행되기 시작했다.
이제 얌전히 에러 잡으러 가면 된다ㅎㅎ
정리하자면,
dJango
의 TestCase
를 통해서 유닛테스트를 하고싶다면 👇🏻 를 사용해야 한다. python manage.py test user.tests