Django 单元测试

2018-10-18  本文已影响0人  LeeDa李

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,然后检查服务端的返回状态是否正确。

参考资料

上一篇下一篇

猜你喜欢

热点阅读