[英]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.