0%

Django单元测试的几点建议

几天前有朋友问到怎么对Django项目做单元测试,于是,我将以前随手记下的笔记整理了一下。

  • 测试用例继承django.test.TestCase
  • 如果在执行测试用例之前需要初始化全局数据,重写类函数setUpTestData()
  • 在测试用例中如果需要批量创建数据,请使用循环一个一个create(),不要使用bulk_create(),因为bulk_create()不会自动save()
  • 在测试过程中,灵活使用mock,推荐使用unittest.mock.patch,详细内容参见:patchers
  • 使用断言assert校验执行结果,不要使用if..else..判断,django.test.TestCase中已经内置一些assert,大家可以自由使用。
  • 如果被测试的代码中使用了缓存,可以使用django.core.cache.backends.dummy.DummyCachedjango.core.cache.backends.locmem.LocMemCache来防止缓存被污染。
  • 做接口测试时,使用self.client发起请求。
  • 测试需要登录时,使用self.client.force_login(user)进行登录。
  • 如果测试需要携带请求头时,可以修改self.client.defaults的值,它是一个dict,直接update就行。
  • 如果一个app下的测试用例代码非常多的话,建议将tests.py文件改成tests/文件夹。