Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么查询不是';t被添加到Django';测试中的s db.connection.querys?_Sql_Django_Testing - Fatal编程技术网

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()
调用清除。还有其他想法吗?哦,你是说在考试本身?谢谢你的建议。不幸的是,根据我的更新,它似乎没有改变任何东西。还有其他想法吗?谢谢。奇怪的是,即使我自己在考试中把它设置回真实的状态,似乎也没有改变任何事情。我能够通过考试。看看我的答案。