加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在setUpClass中访问Django测试客户端

发布时间:2020-12-20 11:40:11 所属栏目:Python 来源:网络整理
导读:我有一个测试类,我想创建并登录用户一次: class UserModelTest(TestCase): fixtures = ['group_perms'] @classmethod def setUpClass(cls): cls.standard_user = UserFactory(first_name='Firsto',last_name='Namo') @classmethod def tearDownClass(cls):
我有一个测试类,我想创建并登录用户一次:

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

所以我的问题(或两个):

>我可以将主持人移动到setUpClass方法中(鉴于它需要)
获得固定装置)?
>我可以在setUpClass中访问self.client吗?

解决方法

简短的回答是否定的 – 但这不是故事的结局.

self.client是一种便利,被配置为“预测试”序列的一部分.这意味着它是基于每个测试配置的;所以你可以在setUp()中使用它,但不能在setUpClass()中使用它.类似地,对于灯具 – 它们被设置为预测试的一部分,因此它们在setUpClass()中不可用.

然而,self.client没有什么特别神奇的东西 – 它只是Django为你设置的django.test.Client的一个实例,因为它是一个非常有用的东西.如果需要,您可以设置自己的客户端 – 您只需要实例化Client的实例:

from django.test import Client
...
self.myclient = Client()

然后像self.client一样使用self.myclient.如果您需要检查“两个用户”行为,这可能非常有用 – 例如,检查管理员是否批准文章,然后用户可以查看它.您创建两个客户端,使用单独的帐户登录它们,然后为每个客户端获取相同的文章URL.在您的情况下,您可以创建一个纯粹用于类设置活动的客户端.

在setUpClass()中使用django.test.Client的唯一警告涉及事务副作用. setUpClass()不属于测试用例的事务保护范围,因此在setUpClass()中执行的任何操作都将在测试数据库中“永久”.您需要手动回滚或撤消setUpClass()所做的任何数据库更改,否则您将获得跨测试用例的副作用.

如果您使用的是Django 1.8,则可以使用setUpTestData() – 在这种情况下,客户端执行的任何操作都将受到事务的保护.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读