簡體   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