Sql 为什么查询不是';t被添加到Django';测试中的s db.connection.querys?
我试图通过检查Sql 为什么查询不是';t被添加到Django';测试中的s db.connection.querys?,sql,django,testing,Sql,Django,Testing,我试图通过检查django.db.connection.querys的内容来捕获代码提交给数据库的查询。但是,由于某些原因,在记录了所有自动生成的设置查询之后,不会从我自己的代码中记录进一步的查询。下面的测试用例演示了该行为 from django.test import TestCase from django.db import reset_queries, connection from django.contrib.auth.models import User from django.
django.db.connection.querys
的内容来捕获代码提交给数据库的查询。但是,由于某些原因,在记录了所有自动生成的设置查询之后,不会从我自己的代码中记录进一步的查询。下面的测试用例演示了该行为
from django.test import TestCase
from django.db import reset_queries, connection
from django.contrib.auth.models import User
from django.conf import settings
class Test1(TestCase):
def setUp(self):
settings.DEBUG = True
def test1(self):
self.assert_(settings.DEBUG, 'DEBUG is False')
reset_queries() #clears out all the setup queries
User.objects.all()
self.assert_(connection.queries, 'No queries')
下面是运行它的结果:
Traceback (most recent call last):
File "/Users/jacob/foo/bar_project/baz_application/tests.py", line 246, in test1
self.assert_(connection.queries)
AssertionError: No queries
有人能解释一下吗?谢谢。当您通过Django测试框架运行测试时。您必须显式设置
调试
。例如,请参阅django文档中的示例用法部分:
# Set up.
# The test runner sets settings.DEBUG to False, but we want to gather queries
# so we'll set it to True here and reset it at the end of the test suite.
>>> from django.conf import settings
>>> settings.DEBUG = True
更新:我可能遗漏了一些东西,但在每次测试中这样做肯定会解决问题。请看一看-
DEBUG
似乎在setup\u test\u环境中设置为False,它在run\u tests
中调用,然后实例化一个DjangoTestRunner
并调用其run方法。所以您需要撤销该操作——基于对的快速扫描,在设置中执行此操作可能就足够了 执行User.objects.all()
后,将不会看到任何查询。这是意料之中的事。原因是什么?Querysets是懒惰的。除非对queryset执行某些操作,否则不会触发任何查询。为了验证这一假设,请尝试以下方法,看看测试是否通过
class Test1(TestCase):
def setUp(self):
settings.DEBUG = True
def test1(self):
self.assert_(settings.DEBUG, 'DEBUG is False')
reset_queries() #clears out all the setup queries
print User.objects.all() # <============= Printing the queryset.
self.assert_(connection.queries, 'No queries')
类Test1(TestCase):
def设置(自):
settings.DEBUG=True
def测试1(自我):
self.assert(settings.DEBUG,“DEBUG为False”)
reset_querys()#清除所有设置查询
打印User.objects.all()#已经完成了,谢谢。设置测试数据库时,大约有5000条sql语句被reset\u querys()
调用清除。还有其他想法吗?哦,你是说在考试本身?谢谢你的建议。不幸的是,根据我的更新,它似乎没有改变任何东西。还有其他想法吗?谢谢。奇怪的是,即使我自己在考试中把它设置回真实的状态,似乎也没有改变任何事情。我能够通过考试。看看我的答案。