【发布时间】:2017-11-02 14:07:48
【问题描述】:
我正在开发一个基于 Django REST 框架的项目。所以我需要为我的 REST API 编写一些测试用例。
我编写了一些从标准 DRF APITransactionTestCase 继承的基本类(我们称之为 BaseAPITestCase)。
在这个类中,我定义了 setUp 方法,我在其中创建了一些测试 属于某些组的用户(我正在使用 UserFactory em> 用 FactoryBoy 编写)。
当我运行我的测试时,第一个(来自第一个 child 类的第一个测试用例方法)成功地创建了具有指定组的用户,但其他的没有(其他测试用例方法在相同的类)。
此时数据库中不存在用户组。似乎在每次新的测试用例运行时都会从数据库中删除现有记录。但是它是如何第一次工作的呢?
我已经阅读了 Django 测试文档,但不知道为什么会这样……谁能解释一下?
主要问题是我应该怎么做才能使这些测试有效?
我应该创建一次用户并将其存储在对象变量中吗?
我应该添加一些参数来保存用户组数据吗?
或者我应该将用户组添加到灯具中吗?在那种情况下,我怎样才能正确地创建这个夹具? (所有相关模型,例如权限和内容类型)
用于说明的简化源代码:
from rest_framework.test import APITransactionTestCase
class BaseAPITestCase(APITransactionTestCase):
def setUp(self):
self.user = UserFactory(
username='login',
password='pass',
group_names=('admin', )
)
self.client = APIClient()
self.client.force_login(self.user)
def tearDown(self):
self.client.logout()
class CampaignListTest(BaseAPITestCase):
def test_authorized_get(self):
# successfully gets user groups from DB
def test_authorized_post(self):
# couldn't find any groups
【问题讨论】:
-
你真的需要
APITransactionTestCase而不是APITestCase吗?如果没有,切换到APITestCase将是最简单的解决方案。 -
@knbk 谢谢。你能解释一下为什么事务一以这种方式工作吗?
标签: python django unit-testing django-rest-framework