Nic*_*ris 3 python testing django
我有一个测试类,我想创建并登录用户一次:
class UserModelTest(TestCase):
fixtures = ['group_perms']
@classmethod
def setUpClass(cls):
cls.standard_user = UserFactory(first_name='Firsto', last_name='Namo')
@classmethod
def tearDownClass(cls):
cls.standard_user.delete()
def setUp(self):
self.moderator = ModeratorFactory() # I'm here because I need access to fixtures to work - but I'd rather be in setUpClass
self.client.login(email=self.moderator.email, pass='pass') # I'm here because I need access to self.client to work - but I'd rather be in setUpClass
Run Code Online (Sandbox Code Playgroud)
所以我的问题(或两个):
我可以将主持人移动到setUpClass方法中(因为它需要访问灯具)?
我可以访问self.client的setUpClass?
简短的回答是否定的 - 但这不是故事的结局.
self.client是一种便利,配置为"预测试"序列的一部分.这意味着它是基于每个测试配置的; 所以你可以使用它setUp(),但不是setUpClass().类似地,对于灯具 - 它们被设置为预测试的一部分,因此它们不可用setUpClass().
然而,没有什么特别神奇的self.client- 它只是django.test.ClientDjango为你设置的一个实例,因为它是一个非常有用的东西.如果需要,您可以设置自己的客户端 - 您只需要实例化以下实例Client:
from django.test import Client
...
self.myclient = Client()
Run Code Online (Sandbox Code Playgroud)
然后self.myclient像你一样使用self.client.如果您需要检查"两个用户"行为,这可能非常有用 - 例如,检查管理员是否批准文章,然后用户可以看到它.您创建两个客户端,使用单独的帐户登录,然后GET使用每个客户端使用相同的文章URL.在您的情况下,您可以创建一个纯粹用于类设置活动的客户端.
使用唯一要注意django.test.Client在setUpClass()涉及到事务性的副作用.setUpClass()不属于测试用例的事务保护范围,因此您所做的任何事情都setUpClass()将在测试数据库中"永久".您需要手动回滚或撤消所做的任何数据库更改setUpClass(),否则您将获得跨测试用例的副作用.
如果你正在使用Django 1.8,你可以使用setUpTestData()- 在这种情况下,客户端做的任何事情都会受到交易的保护.
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |