テスト用のDBコネクションをいじってしまってて素直にTransactionTestCase.assertNumQueriesが使えない場合に。
# coding: utf-8
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
from django.conf import settings
from django.db import connections
import unittest, pprint
from collections import deque
from core.models import Kvs, Hoge
class TestKvs(unittest.TestCase):
def setUp(self):
settings.DEBUG = True
def tearDown(self):
# django.db. reset_queries でもいい
connections['default'].queries_log = deque()
settings.DEBUG = False
def test_simple(self):
hoge = list(Hoge.objects.all())[0]
# select
self.assertEqual(len(connections['default'].queries), 1)
Kvs.set(hoge.id, hoge)
# select, begin, update
self.assertEqual(len(connections['default'].queries), 4)
got = Kvs.get(hoge.id)
# select
self.assertEqual(got.id, hoge.id)
self.assertEqual(len(connections['default'].queries), 5)
if __name__ == "__main__":
unittest.main()
参考: Django: is there a way to count SQL queries from an unit test?