编写测试时一般有一些规则,以下是一些主要的规则:
- 测试应该关注一个小部分的功能
- 测试必须要有明确的目的
- 测试应该是独立
- 在编码之前,在提交和推送代码之前运行测试
- 使用长和描述性的名字进行测试
6.1 运行测试
python manage.py test rango
测试Rango中的模型
好吧,让我们创建一个测试。 在类别模型中,我们要确保浏览数是零或正的,因为观点的数量,比方说,永远不能少于零。 为了创建一个测试,我们可以把下面的代码放进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)
测试结果:
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
测试视图
模拟客户端,它通过在url内部调用一个Django视图。 在测试中,您可以访问响应(包括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 覆盖测试
代码覆盖率测量你的代码库已经被测试了多少,以及你的代码已经通过测试。你可以通过pip install coverage安装一个叫coverage的包.它会自动分析你有多少代码覆盖。 一旦您安装完成,运行以下命令:
$ coverage run --source='.' manage.py test rango
查看
coverage report