Объектно-ориентированная конструкция программного обеспечения Bertrand Meyer
Если для параметра DEBUG
установлено значение True в settings.py
(предположительно, в тестовой среде), вы можете подсчитывать запросы, выполненные в вашем проверьте следующее:
from django.db import connection
class DoSomethingTests(django.test.TestCase):
def test_something_or_other(self):
num_queries_old = len(connection.queries)
do_something_in_the_database()
num_queries_new = len(connection.queries)
self.assertEqual(n, num_queries_new - num_queries_old)
Ответ Винэя правильный, с одним незначительным дополнением.
Среда модульного тестирования Django фактически устанавливает DEBUG в значение False при запуске, поэтому независимо от того, что у вас есть в settings.py
, вы не получите ничего, заполненного в connection.queries
в ваш модульный тест, если вы снова не включите режим отладки. Документы Django объясняют обоснование этого следующим образом:
Независимо от значения параметра DEBUG в вашем файле конфигурации, все тесты Django запускаются с DEBUG = False. Это необходимо для того, чтобы наблюдаемые выходные данные вашего кода совпадали с тем, что будет видно в производственных настройках.
Если вы уверены, что включение отладки не повлияет на ваши тесты (например, если вы если конкретно проверять попадания в БД, как это звучит так, как вы), решение состоит в том, чтобы временно повторно включить отладку в модульном тесте, а затем вернуть ее обратно:
def test_myself(self):
from django.conf import settings
from django.db import connection
settings.DEBUG = True
connection.queries = []
# Test code as normal
self.assert_(connection.queries)
settings.DEBUG = False