gpt4 book ai didi

python - Django 测试数据库不返回任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:56 24 4
gpt4 key购买 nike

我遇到了与 when does the database is being destroy in django tests? 完全相同的问题,我的测试数据库似乎在每种方法之间被删除了。我知道每次我重新运行 python3 manage.py test 时它都会被清除,但它不应该在测试中间被删除。

我正在运行 Python 3.4.3、Postgresql 9.5.3、Django 1.9

from django.test import TestCase
class myTestCases(TestCase):
def test_1_load_regions(self):
MyMethods._updateRegions()
self.assertEqual(True, len(Region.objects.all()) >= minRegionsExpected)
print("Regions: %s Languages: %s"%(len(Region.objects.all()), len(Language.objects.all())))

def test_2_load_languages(self):
# Generated by _updateRegions, just check that a few languages exist
print("Regions: %s Languages: %s"%(len(Region.objects.all()), len(Language.objects.all())))

self.assertEqual(True, len(Language.objects.all()) >= minLanguagesExpected)

我得到这样的输出:

Regions: 11 Languages: 19
.Regions: 0 Languages: 0
F

这让我觉得第一个测试结束时一切都在保存,但不知何故当第二个测试开始时一切都被清除了。我宁愿避免在每次测试开始时重新运行所有内容,但现在我对如何让测试数据库真正保留我的结果感到困惑......

编辑/结果: 因此,在从评论和答案的正确方向上进行一些探索之后,我找到了我要找的东西。 https://docs.djangoproject.com/en/1.9/topics/testing/overview/

Warning

If your tests rely on database access such as creating or querying models, be sure to create your test classes as subclasses of django.test.TestCase rather than unittest.TestCase.

Using unittest.TestCase avoids the cost of running each test in a transaction and flushing the database, but if your tests interact with the database their behavior will vary based on the order that the test runner executes them. This can lead to unit tests that pass when run in isolation but fail when run in a suite.

我使用 test_1、test_2、test_3 作为我的名字以确保操作顺序,所以这不是问题。通过从 django.test.TestCase 切换到 unittest.TestCase,我得到了我想要的结果,我的数据库在每个测试用例之间保持不变。

最佳答案

其实根据Django tutorial ,数据库在每次测试之间回滚。 (请参阅链接部分的底部。)

如果您希望在测试之间有一个共同的设置,您应该考虑重写 TestCase 方法 setUp。这是在每个测试函数之前运行的。 unittest documentation应该对此有所帮助,Django 有一个 example在他们的文档中也是如此。

关于python - Django 测试数据库不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38378750/

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