일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 알고리즘 풀이
- MAC
- django rest framework
- 백준
- django widget
- react
- 장고
- form
- es6
- PYTHON
- 알고리즘
- js
- CSS
- DRF
- 파이썬
- 알고리즘 문제
- 알고리즘 연습
- 파이썬 알고리즘
- Django
- Baekjoon
- API
- Git
- javascript
- django ORM
- java
- web
- c++
- AWS
- Algorithm
- HTML
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] ORM CookBook, ORM 코드를 테스트하는 방법 본문
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다.
1. 질의 횟수 확인
Django 단위 테스트 클래스에 assertNumQueries()
메서드를 사용하여 데이터베이스에 발생하는 질의 횟수를 검증할 수 있습니다.
def test_number_of_queries(self):
User.objects.create(username='testuser1')
# 위 ORM 명령으로 질의 횟수가 1 번 일어나야 한다.
self.assertNumQueries(1)
User.objects.filter(username='testuser').update(username='test1user')
# 질의 횟수가 한 번 증가해야 한다.
self.assertNumQueries(2)
2. 테스트 시 데이터베이스 재사용
Django에서는 아래와 같은 명령어로 테스트를 수행합니다.
python manage.py test
이 때 기본적으로는 본래의 데이터베이스에 영향을 미치지 않게 하기 위해 데이터베이스를 새로 생성하게 되는데 이 때 적지 않은 시간이 소요됩니다.
이 시간을 단축하기 위해서 테스트 시, 이전에 생성한 데이터베이스를 유지할 수 있습니다.
python manage.py test --keepdb
3. 모델 객체를 데이터베이스에서 다시 읽기
refresh_from_db()
메서드를 사용하여 데이터베이스에서 모델을 다시 읽어들일 수 있습니다.
값을 갱신하는 테스트를 작성할 때 유용한 기능입니다.
다음 예를 살펴보세요.
class TestORM(TestCase):
def test_update_result(self):
userobject = User.objects.create(username='testuser')
User.objects.filter(username='testuser').update(username='test1user')
# 이 때, userobject 인스턴스의 username은 'testuser' 입니다.
# 그러나 데이터베이스에서는 'test1user'로 수정되었습니다.
# 모델 인스턴스의 속성이 데이터베이스와 맞지 않으므로 다시 읽어들입니다.
userobject.refresh_from_db()
self.assertEqual(userobject.username, 'test1user')
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django] Spanning multi-valued relationships, 다중 값 관계 확장 (0) | 2020.10.08 |
---|---|
[Django] ORM Cookbook, 모델을 정의하는 방법 (0) | 2020.08.28 |
[Django] ORM Cookbook, 조회 결과를 정렬하는 방법 (0) | 2020.08.27 |
[Django] ORM Cookbook, 항목을 생성·갱신·삭제하는 방법 (0) | 2020.08.27 |
[Django] ORM Cookbook, 정보를 조회하고 필요한 항목을 선별하는 방법(3) (0) | 2020.08.27 |
Comments