几天前有朋友问到怎么对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.DummyCache或django.core.cache.backends.locmem.LocMemCache来防止缓存被污染。 - 做接口测试时,使用
self.client发起请求。 - 测试需要登录时,使用
self.client.force_login(user)进行登录。 - 如果测试需要携带请求头时,可以修改
self.client.defaults的值,它是一个dict,直接update就行。 - 如果一个
app下的测试用例代码非常多的话,建议将tests.py文件改成tests/文件夹。