Django自带单元测试的模块django.test
,该模块使用了Python的标准库unitest
,基于类的方法来进行测试。该模块中包含了名为TestCase
的测试类,该类继承自unitest.TestCase
。
在使用时,我们需要在各APP文件夹下中的test.py文件里从django.test
中引入TestCase
类,从该类中派生我们的测试类并定义我们的测试方法。
测试类设计完成之后,我们通过以下命令来进行测试:
python manage.py test
运行该命令后,测试程序会在本项目中所有以test开头的文件中查找测试用例,即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"')
在AnimalTestCase(TestCase)
类中,我们在setUp
方法中对model等测试数据进行初始化,而下面定义的test_animals_can_speak
则是将要执行的测试代码。在测试代码中,我们可以assertEqual
等断言函数来判断我们的业务代码中是否存在错误。
在涉及到Http请求的业务,我们在进行测试时可以使用django.test.Client
类的实例来模拟发送GET或POST请求到相应的URL,然后检查服务端的返回状态是否正确。