Django 单元测试(简单例子)
对于当今Web developer来说,自动化测试是一项非常有用的”除虫”工具。你可以使用测试集——test suite——去避免或者解决一系列的问题:
当你在写新代码的时候,测试可以验证你的代码是否按预期执行
当你重构或则修改旧代码时,你可以使用测试来确保你的修改不会对程序造成不良影响
测试Web 程序是一项复杂的工作。因为一个Web程序由多种逻辑层组成——从Http层的request 执行,到表单的确定和处理,到模板的渲染。利用Django测试框架以及齐全的配套工具,
你可以模request,插入测试数据,检查程序输出和一般情况下的测试。
最重要的是,Django测试框架非常简单!
Django中,测试由两种方式:doctests 和unit tests。
doctests:
doctests使用的是python中标准的doctest测试模块。它是由系统在你的docstring(注释)中查找测试代码。
Django 的test runner在你的models.py文件中查找并执行你的doctests。如果找到tests.py文件,它同样会去里面查找doctests。
你可以将doctest语句放入你工程中的任何models.py文件中。但一般情况下,会将app的doctests放在module docstring中,而model的doctests会放在各自的model中
举例:
from django.db import model
class Animal(models.Model):
"""
An animal that knows how to make noise
# Create some animals
>>> lion = Animal.objects.create(name="lion", sound="roar")
>>> cat = Animal.objects.create(name="cat", sound="meow")
# Make 'em speak
>>> lion.speak()
'The lion says "roar"'
>>> cat.speak()
'The cat says "meow"'
"""
name = models.CharField(maxlength=20)
sound = models.CharField(maxlength=20)
def speak(self):
return 'The %s says "%s"' % (self.name, self.sound)
当你运行测试的时候,test utility会找到这个docstring。这里需要注意一下,上面的docstring有
部分类似于python的交互环境。好了,运行它吧。
unittests:
Django的unit tests使用的标准模块库是unittest。和doctests一样,Django的test runner 在
models.py文件或者在app目录下存在的tests.py文件中查找定义了的unit test cases。
一个与上例doctests等价的unittest test case如下:
import unittest
from myapp.models import Animal
class AnimalTestCase(unittest.TestCase):
def setUp(self):
self.lion = Animal.objects.create(name="lion", sound="roar")
self.cat = Animal.objects.create(name="cat", sound="meow")