Django单元测试基础知识

关于django的单元测试,需要知道的是

  1. 对于每一个测试方法都会将setUp()和tearDown()方法执行一遍
  2. 会单独新建一个测试数据库来进行数据库的操作方面的测试,默认在测试完成后销毁。
  3. 在测试方法中对数据库进行增删操作,最后都会被清除。也就是说,在test_add中插入的数据,在test_add测试结束后插入的数据会被清除。
  4. django单元测试时为了模拟生产环境,会修改settings中的变量,例如, 把DEBUG变量修改为True, 把ALLOWED_HOSTS修改为[*]。

简单的例子

from django.test import TestCase
from myapp.models import Animal

# Django的单元测试基于unittest库
class StudentTestCase(TestCase):
    # 测试函数执行前执行
    def setUp(self):
        print("======in setUp")

    # 需要测试的内容
    def test_add(self):
        student = Student(name='aaa')
        student.save()
        self.assertEqual(student.name, 'aaa')

    # 需要测试的内容
    def test_check_exit(self):
        self.assertEqual(0,  Student.objects.count())

     # 测试函数执行后执行
    def tearDown(self):
        print("======in tearDown")

运行单元测试

# 测试整一个工程
$ ./manage.py test 

# 只测试某个应用
$ ./manage.py test app --keepdb


# 只测试一个Case
$ ./manage.py test animals.tests.StudentTestCase

# 只测试一个方法
$ ./manage.py test animals.tests.StudentTestCase.test_add

settings变量的修改

若干需要在单元测试时修改,setting命令。例如,django在单元测试时会将settings.DEBUG 设置为True, 而我们需要将其设置为False

方式1: 直接在修改

class BaseApiTest(TestCase):
    def setUp(self):
        #testcase DEBUG = False
        settings.DEBUG = False

     def test_b(self):
        self.assertEqual(2, 1+1)

    def tearDown(self):
        pass

方式2: 通过装饰器修改

from django.test.utils import override_settings

class BaseTest(TestCase):   
    def setUp(self):
        pass

    # 利用该装饰器,可以在但个测试函数内修改settings变量, 而不影响
    @override_settings(DEBUG=False)
     def test_b(self):
        self.assertEqual(2, 1+1)

    def tearDown(self):
        pass




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值