Django单元测试(一)

Django测试框架很是简单,首选方法是使用python标准库中的unittest模块。python

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的子类),自动创建测试集而后运行测试。sql

注意:若是测试是基于数据库访问的(读取、查询Model),必定要用django.test.TestCase创建测试类,而不要用unittest.TestCase。数据库

Runing tests

执行目录下全部的测试(全部的test*.py文件):django

$ python manage.py test

执行animals项目下tests包里的测试:app

$ python manage.py test animals.tests

执行animals项目里的test测试:框架

$ python manage.py test animals

单独执行某个test case:ide

$ python manage.py test animals.tests.AnimalTestCase

单独执行某个测试方法:工具

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

为测试文件提供路径:单元测试

$ python manage.py test animals/

通配测试文件名:

$ python manage.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',
)
相关文章
相关标签/搜索