일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- pyside6
- 재고 관리
- pip 설치
- Python
- 페이지 최적화
- django drf
- channels
- query 최적화
- ERP
- pyside6 ui
- pip 오류
- django test
- test drive development
- Self ERP
- materialized
- optimization page
- django rank
- qpa_plugin
- django erp
- 장고
- uiload
- django
- 중량 관리
- tensorflow
- 파이썬
- qwindows.dll
- 장고로 ERP
- orm 최적화
- QApplication
- django role based
- Today
- Total
취미삼아 배우는 프로그래밍
장고 테스트 코드 작성기 본문
nadure.tistory.com/37?category=851426
혼자서 만드는 마감정산 시스템(Django)
장고 코딩하다 막혀서 풀어보는 #리뷰 자가 코드 리뷰 (영감을 얻어 가셨으면 합니다.) 1. 모델(전체) from django.db import models from jsonfield import JSONField from django.db.models import F, Sum, Coun..
nadure.tistory.com
여기에서 만든 모델에
이와 같이 엑셀로 만든 데이터를 넣었어야 했다.
근데
이와 같이 생겨먹은 모델에 저 위의 데이터들을 끼워넣자니 여간 시행착오가 생기는게 아니다.
수 많은 테스트들, 그러니까 테스트 한 번 하고 데이터베이스를 지우고를 계속해서 반복해야한다.
근데 그마저도 어드민 페이지에서 데이터가 잘 들어갔는지를 확인해줘야한다. 딱봐도 고생각이 보였다.
이리저리 방법을 생각해보다가, 테스트코드를 작성하기로 했다.
예전부터 TDD가 좋다느니, TDD로 코드를 짜야한다드니 라는 말은 들었었는데, 이참에 해보기로 했다.
근데 Django TestCase에 대해서 문서상 제일 작성이 잘돼있는곳은 여기밖에 없었다.
developer.mozilla.org/ko/docs/Learn/Server-side/Django/Testing
Django 튜토리얼 파트 10: Django 웹 어플리케이션 테스트하기
Writing test code is neither fun nor glamorous, and is consequently often left to last (or not at all) when creating a website. It is however an essential part of making sure that your code is safe to release after making changes, and cost-effective to mai
developer.mozilla.org
난 이전에는 assert가 왜 쓰이는지를 도통 알 수가 없었는데,
테스트 코드를 작성하면서 알게됐다. 이거는 있어야 할 수 밖에 없었다.
assert는 의도한 값이 다르게 들어가면 코드 전체를 멈춰준다. 거의 뭐 테스트 코드 전용이 아닐까 하는 생각이 든다.
그렇게 해서 만든 코드
from django.test import TestCase
from django.utils.timezone import timezone
from coat_finishing.models import (DataOneRow, ProductList,
DetailedData, TheOneDistrict, BaseData, CoatCompanyModel)
# self.assertTrue(False)
class BulkCreateModelTest(TestCase):
company = '대림'
location_name = '망우동'
district = 'A-1'
coated_company = '삼동'
@classmethod
def setUpTestData(cls):
def return_product_id(name):
product, created = ProductList.objects.get_or_create(product=name)
return product.id
bulk_list = [
DataOneRow(
product_name_id=return_product_id('PANEL'),
w1_value=999, h_value=9999, B_value_quantity=20
),
DataOneRow(
product_name_id=return_product_id('BSL'),
w1_value=888, h_value=888, C_value_quantity=30
),
]
bulk_list = bulk_list*1000 # 2,000 datas
rows = DataOneRow.objects.bulk_create(bulk_list)
for i in rows:
i.save()
detailed = DetailedData(changes_log='신규')
detailed.save()
detailed.data_rows.add(*rows)
detailed.save()
coat_instance, created = CoatCompanyModel.objects.get_or_create(coated_company=cls.coated_company)
one_district = TheOneDistrict.objects.create(company=cls.company, location_name=cls.location_name,
district=cls.district, detailData_id=detailed.id)
BaseData.objects.create(coated_company=coat_instance, one_district_id=one_district.id)
def test_DetailedData_datacheck(self):
a = DetailedData.objects.all()[0]
self.assertTrue(bool(a))
def test_all_data_validation(self):
base = BaseData.objects.get(id=1)
self.assertEqual(self.coated_company, base.coated_company.coated_company)
self.assertEqual(self.company, base.one_district.company)
self.assertEqual(self.location_name, base.one_district.location_name)
self.assertEqual(self.district, base.one_district.district)
지금 필요했던건, 데이터베이스를 테스트용도로 짜올리는거였지, 값의 확인등과 같은 다른건 별로 중요치 않았다.
def setUpTestData(cls):
부분을 통해서 데이터베이스를 실험삼아 쌓아올릴 수 있다.
그러면 테스트 후 생기는 이런저런 데이터 정리 작업 필요없이, 그냥 계속 코드만 작동되는지를 확인해나갈 수 있는것이다.
이걸 통해 느꼈다.
assert는 되게 필요한 놈이었고,
테스트 코드 작성은 결과물이 중요한게 아니라, 과정자체를 수월하게 해주는데 의미가 있다는걸 깨달았다. 그리고 이 테스트 코드들이 나중에 모두 모였을 때, 의도치 않았던 추후에 코드를 작성하며 생길 버그들까지도 자연스레 테스트하게 된다는걸 깨달았다.
그리고 한 번에 '모든 테스트코드를 짜봐야지' 하고 짜면 절대 제대로 짤 수 없다는걸 깨달았다. 차곡차곡 쌓는게 중요한것 같다.
'코드 자가리뷰(장고)' 카테고리의 다른 글
ORM코드 최적화가 필요하다. (0) | 2020.08.23 |
---|---|
model.py에는 온갖 정성을 쏟아붓자. (0) | 2020.08.20 |
혼자서 만드는 마감정산 시스템(Django) (0) | 2020.08.07 |
초등학교 게시판 만들기 -3 (0) | 2020.04.23 |
초등학교 학교게시판 만들기. (0) | 2020.04.19 |