gpt4 book ai didi

python - 为什么在测试中没有将查询添加到 Django 的 db.connection.queries 中?

转载 作者:行者123 更新时间:2023-11-28 19:44:29 25 4
gpt4 key购买 nike

我试图通过检查 django.db.connection.queries 的内容来捕获我的代码提交给数据库的查询。但是出于某种原因,在记录了所有自动生成的设置查询之后,我自己的代码不再记录任何查询。以下测试用例演示了该行为。

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

有人能解释一下吗?谢谢。

最佳答案

您必须显式设置 DEBUG。例如,请参阅 these tests 的示例用法部分在 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

更新:我可能遗漏了一些东西,但在每次测试中都这样做肯定可以解决问题。看看 DjangoTestSuiteRunner -- 似乎 DEBUGsetup_test_environment 中被设置为 False,它在 run_tests 中被调用,它继续实例化一个 DjangoTestRunner 并调用它的 run 方法。所以你需要撤消它——基于对 code 的快速扫描, 在您的 setup 方法中执行此操作可能就足够了。

关于python - 为什么在测试中没有将查询添加到 Django 的 db.connection.queries 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com