Dans la migration de django 1.7, assertNumQueries renvoie le résultat de la requête capturée en cas d'échec. Il est venu me donner. Ainsi, si vous écrivez le code suivant, vous serez en mesure de comprendre la requête du DB émis dans la partie jointe à.
from django.test import TestCase
class Test(TestCase):
def _callFUT(self):
Model(name="foo").save()
return Model.objects.count()
def test_it(self):
with self.assertNumQueries(3):
self.assertEqual(self._callFUT(), 1)
Par exemple, dans le code ci-dessus, vous pouvez savoir combien de requêtes ont été exécutées dans self._callFUT ()
.
À l'origine, il y a deux cas, mais j'en ai spécifié 3 dans ʻassertNumQueries () `et je l'ai fait échouer exprès.
Résultat d'exécution
Creating test database for alias 'default'...
F
======================================================================
FAIL: test_it (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "qr_34141zLt.py", line 46, in test_it
self.assertEqual(self._callFUT(), 1)
File "/home/podhmo/vboxshare/venvs/django/lib/python3.3/site-packages/django/test/testcases.py", line 90, in __exit__
query['sql'] for query in self.captured_queries
AssertionError: 2 != 3 : 2 queries executed, 3 expected
Captured queries were:
QUERY = 'INSERT INTO "model" ("name") VALUES (%s)' - PARAMS = ('foo',)
QUERY = 'SELECT COUNT(*) AS "__count" FROM "model"' - PARAMS = ()
----------------------------------------------------------------------
Ran 1 test in 0.005s
FAILED (failures=1)
Destroying test database for alias 'default'...
Vous pourrez voir la requête émise.
Vous pourrez peut-être utiliser django.test.utils.CaptureQueriesContext
.
Faites de votre mieux avec le sentiment suivant
from django.test.utils import CaptureQueriesContext
from django.db import connections
with CaptureQueriesContext(connections["default"]):
do_something()
Wrote by PileMd
Recommended Posts