[英]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)
如果您setUpTestData
, TestCase
类还包含一个setUpTestData
方法, https : setUpTestData
PS: test_movie_list_empty
名称听起来很奇怪,导致似乎测试电影列表不为空
因为在测试中您使用的是一个没有对象的临时数据库 :
需要数据库的测试(即模型测试)将不会使用“实际”(生产)数据库。 将为测试创建单独的空白数据库。
无论测试是通过还是失败,都将在执行所有测试后破坏测试数据库。
使用真实的数据库进行测试是危险的。 尤其是该测试也应该在其他机器上可以重现。 您应该使用夹具进行测试。 看factory_boy 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.