繁体   English   中英

当Django解释器返回True时,为什么测试用例在Django中失败?

[英]Why is test case failing in Django when it returns True in Python intrepreter?

当我在Python解释器中运行此代码时,它返回True:

>>> from movies.models import Movie
>>> movie_list = Movie.objects.all()
>>> bool(movie_list)
True

当我运行测试用例python3 manage.py test movies ,它将失败:

from django.test import TestCase
from .models import Movie

class QuestionMethodTests(TestCase):

    def test_movie_list_empty(self):
        movie_list = Movie.objects.all()
        self.assertEqual(bool(movie_list), True)

我想念什么? 考试不应该通过吗?

我懂了。 这是否意味着测试用例仅测试代码,但不能在测试中使用任何实际的数据库内容?

默认情况下,不,并且您也不想弄乱实际的数据库,有一种通常的方法为测试提供初始对象(实际来源可能有所不同,例如从文件加载)

from django.test import TestCase
from .models import Movie

class QuestionMethodTests(TestCase):

    def setUp(self):
        # You can create your movie objects here
        Movie.objects.create(title='Forest Gump', ...)

    def test_movie_list_empty(self):
        movie_list = Movie.objects.all()
        self.assertEqual(bool(movie_list), True)

如果您setUpTestDataTestCase类还包含一个setUpTestData方法, https : setUpTestData

PS: test_movie_list_empty名称听起来很奇怪,导致似乎测试电影列表不为空

因为在测试中您使用的是一个没有对象的临时数据库

需要数据库的测试(即模型测试)将不会使用“实际”(生产)数据库。 将为测试创建单独的空白数据库。

无论测试是通过还是失败,都将在执行所有测试后破坏测试数据库。

使用真实的数据库进行测试是危险的。 尤其是该测试也应该在其他机器上可以重现。 您应该使用夹具进行测试。 factory_boy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM