編寫測(cè)試時(shí)一般有一些規(guī)則,以下是一些主要的規(guī)則:
- 測(cè)試應(yīng)該關(guān)注一個(gè)小部分的功能
- 測(cè)試必須要有明確的目的
- 測(cè)試應(yīng)該是獨(dú)立
- 在編碼之前,在提交和推送代碼之前運(yùn)行測(cè)試
- 使用長(zhǎng)和描述性的名字進(jìn)行測(cè)試
6.1 運(yùn)行測(cè)試
python manage.py test rango
測(cè)試Rango中的模型
好吧,讓我們創(chuàng)建一個(gè)測(cè)試。 在類別模型中,我們要確保瀏覽數(shù)是零或正的,因?yàn)橛^點(diǎn)的數(shù)量,比方說(shuō),永遠(yuǎn)不能少于零。 為了創(chuàng)建一個(gè)測(cè)試,我們可以把下面的代碼放進(jìn)rango/ tests.py
from django.test import TestCase
from rango.models import Category
class CategoryMethodTests(TestCase):
def test_ensure_views_are_positive(self):
"""ensure_views_are_positive should results True for categories where views are zero or positive"""
cat=Category(name='test',views=-1, likes=0)
cat.save()
self.assertEqual((cat.views>=0),True)
測(cè)試結(jié)果:
Traceback (most recent call last):
File "C:\Users\XC\PycharmProjects\tango_with_django_project\rango\tests.py", line 9, in test_ensure_views_are_positive
self.assertEqual((cat.views>=0),True)
AssertionError: False != True
測(cè)試視圖
模擬客戶端,它通過(guò)在url內(nèi)部調(diào)用一個(gè)Django視圖。 在測(cè)試中,您可以訪問(wèn)響應(yīng)(包括HTML)和上下文字典。
from django.core.urlresolvers import reverse
class IndexViewTests(TestCase):
def test_index_view_with_no_categories(self):
"""If no questions exist, an appropriate message should be displayed.
"""
response=self.client.get(reverse('index'))
self.assertEqual(response.status_code,200)
self.assertContains(response,"There are no categories present.")
self.assertQuerysetEqual(response.context['categories'], [])
6.2 覆蓋測(cè)試
代碼覆蓋率測(cè)量你的代碼庫(kù)已經(jīng)被測(cè)試了多少,以及你的代碼已經(jīng)通過(guò)測(cè)試。你可以通過(guò)pip install coverage安裝一個(gè)叫coverage的包.它會(huì)自動(dòng)分析你有多少代碼覆蓋。 一旦您安裝完成,運(yùn)行以下命令:
$ coverage run --source='.' manage.py test rango
查看
coverage report