Testing是寫出好Software的必備條件。它可以讓你推出新功能時有足夠信心你的system可以正常運作,不用人手到處test,也可以及早發現bug,等等等等。
這篇就先看看在Django如何建立基本的test。
Basic Test
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"')
- Django的test其實背後使用unittest
- 用
django.test.TestCase
,能支援db transaction,而相反unittest.TestCase
能省下一些db lock時間,要自己衡量一下 TestCase.setUp
是準備test data的地方(一般是建立database objects)
可到python unittest module看更多test的做法。
File Structure
Default
預設建立app的時候,Django自動幫你加了一個tests.py
:
# some_app/
├── __init__.py
├── apps.py
├── migrations/
├── models.py
├── tests.py # Here
└── views.py
當你test這個app,用下面的command:
$ ./manage.py test some_app.tests
Django會自動找出some_app.tests
裡的所有TestCase
。
如果你只想run一個TestCase,也可以:
$ ./manage.py test some_app.tests.AnimalTestCase
獨立檔案Structure
當TestCase
變多,可以分開獨立檔案:
└── tests
├── __init__.py
├── some_tests.py
└── other_tests.py