首頁  >  文章  >  後端開發  >  Django單元測試(一)

Django單元測試(一)

高洛峰
高洛峰原創
2016-10-17 13:53:451125瀏覽

Django測試框架非常簡單,首選方法是使用python標準庫中的unittest模組。

Writing tests

Django的單元測試使用python的unittest模組,這個模組使用基於類別的方法來定義測試。類別名為django.test.TestCase,繼承於python的unittest.TestCase。

from django.test import TestCase
from myapp.models import Animal
  
class 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"')

   

運行測試的時候,測試程式會在所有以test開頭的檔案中找出所有的test cases(inittest.TestCase的子類別),自動建立測試集然後執行測試。

注意:如果測試是基於資料庫存取的(讀取、查詢Model),一定要用django.test.TestCase建立測試類,而不要用unittest.TestCase。

Runing tests

執行目錄下所有的測試(所有的test*.py檔):

$ python manage.py test

執行animals項目下tests包裡的測試:

執行animals項目下tests包裡的測試:

animals.tests

執行animals專案裡的test測試:

$ python manage.py test animals

單獨執行某個test case:

$ python manage.py test 測試測試方法:

$ python manage.py test animals.tests.AnimalTestCase.test_animals_can_speak

為測試檔案提供路徑:

$ python manage.py test testage/py py test --pattern="tests_*.py"

啟用warnings提醒:

$ python -Wall manage.py test

資料庫

測試是需要資料庫的,django會為測試單獨產生資料庫。不管你的測試是否通過,當你所有的測試都執行過後,這個測試資料庫就會被銷毀。

預設情況下,測試資料庫的名字是test_DATABASE_NAME,DATABASE_NAME是你在settings.py裡配置的資料庫名稱.如果 你需要給測試資料庫一個其他的名字,在settings.py中指定TEST_DATABASE_NAME的值。使用sqlite3時,資料庫是在記憶體中建立的。

除了資料庫是單獨建立的以外,測試工具會使用相同的資料庫設定--DATABASE_ENGINE, DATABASE_USER, DATABASE_HOST等等.建立測驗資料庫的使用者DATABASE_USER(settings中)指定,所以你需要確認DATABASE_USER有足夠的權限去建立資料庫。

測試執行順序

為了確保所有的測試都從乾淨的資料庫開始,執行順序如下:

1.所有的TestCase子類別首先運行。

2.所有其他的單元測試(unittest.TestCase,SimpleTestCase,TransactionTestCase)。

3.其它的測試(例如doctests等)

加速測試

可以將PASSWORD_HASHERS設定為更快的演算法:

PASSWORD_HASHERS = (
    'django.contrib.auth.hashers.MD5PasswordHasher',
)

   


🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn