django單元測試


django 的單元測試分爲2種,一種是doc test ,一種是 unit test.html

這裏只描述 unit test.python


這裏是官方文檔:https://docs.djangoproject.com/en/dev/topics/testing/overview/ git

其中的重點是:github

在咱們的項目模塊中創建 test.py (這個很重要,django默認加載模塊中的test.py文件來執行測試)。在其中定義模塊繼承 django.test.TestCase。python 會自動加載咱們定義的模塊的以 test 開頭的方法。sql

from django.test import TestCase
from myapp.models import 

Animalclass AnimalTestCase(TestCase):
    def setUp(self):
        Animal.objects.create(name="lion", sound="roar")
        Animal.objects.create(name="cat", sound="meow")

    def test_animals_can_speak(self):
        """Animals that can speak are correctly identified"""
        lion = Animal.objects.get(name="lion")
        cat = Animal.objects.get(name="cat")
        self.assertEqual(lion.speak(), 'The lion says "roar"')
        self.assertEqual(cat.speak(), 'The cat says "meow"')

完成以後,執行命令數據庫

./manage.py test


默認狀況下,django的測試過程會 建立測試數據庫,執行test。刪除測試數據庫 django

這是一個很蛋疼的地方,由於測試數據庫建立過程會花費很長的時間。app

對於這中狀況,有2個解決辦法:ide

1.使用內存數據庫sqlite。在settings.py中配置單元測試

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3',}

 這樣作,一樣會建立測試數據庫,可是時間會少不少。

2.使用django的testrunner。 在settings.py中配置

TEST_RUNNER  = 'django.test.runner.DiscoverRunner'

 這樣作,一樣也會建立數據庫,可是這個建立數據庫的時間話費也很是的少。

3.git hub上面有個項目叫作 django-test-utils 。這個項目有一個功能叫作 複用默認的數據庫,不過,我安裝了這個代碼,使用了這個功能後,提示說,模塊沒有keep-database 這個屬性的錯誤。google 上也有人說這個問題。一樣是,沒有解決方案。因此,這個方法,沒有跑通。

其實這個問題的緣由是,他這個項目的keep-database模塊的寫法太老,django沒法讀取。非要用這keep-database的這個邏輯的話,能夠將 'django.test.runner.DiscoverRunner' 的複製出來,在裏面把建立數據庫和刪除數據庫的邏輯給幹掉。

   在上面方法1+方法2一塊兒使用的時候,雖然建立了測試數據庫,可是最終話費的時間是很是少的,因此,這個辦法組合也算是解決了這個問題。

相關文章
相關標籤/搜索