在测试类中,我想获取给定类型的所有对象;这总是给一个空集:
from Dictionnaire.models import Entree
class Test(TestCase):
def setUp(self):
...
Q=Entree.objects.all()
print(Q.count()) <------always get 0.
为什么?
答案 0 :(得分:1)
运行测试的想法是每次运行测试时都具有可重现的情况。因此,TestCase
每次初始化时都会创建一个新的空数据库,方法是先运行所有迁移。这样,您可以确保每次运行测试时都遇到相同的情况。
因此,TestCase
不使用您的开发数据库,也不使用您的开发服务器(runserver
)。它完全在自己的“世界”中运行。
如果要确保在运行测试时数据库中有一些数据,请覆盖类方法setUpTestData()
,这比在setUp()
中进行每个测试都要快。
答案 1 :(得分:0)
您可以将数据库转储到夹具中,然后从测试数据库中加载它:
夹具是Django知道如何导入到的数据的集合 数据库。创建灯具的最直接方法是 您已经有一些数据可以使用
manage.py dumpdata
命令夹具可以用JSON,XML或YAML编写(已安装PyYAML) 文档。
加载数据非常容易:只需调用
manage.py loaddata <fixturename>
, 您创建的夹具文件的名称在哪里
然后从SetUp()
中的test.py
:
from django.core.management import call_command
call_command("loaddata", "' + 'fixturefile.json' + '",
verbosity=0)
但是,为了使您的测试数据库与生产数据库保持最新(我不建议这样做),您必须设置cron作业或其他内容。
来源:
https://stackoverflow.com/a/48737566/5094841
https://django-testing-docs.readthedocs.io/en/latest/fixtures.html