gpt4 book ai didi

python - 在 setUpClass 中访问 Django 测试客户端

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:24 25 4
gpt4 key购买 nike

我有一个测试类,我想在其中创建并登录一个用户:

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。如果您需要检查“两个用户”行为,这将非常有用 - 例如,检查是否管理员批准了一篇文章,然后用户可以看到它。您创建了两个客户端,使用不同的帐户登录它们,然后用每个客户端GET 相同的文章 URL。在您的情况下,您可以创建一个纯粹用于类(class)设置事件的客户端。

setUpClass() 中使用 django.test.Client 的唯一注意事项与事务副作用有关。 setUpClass() 不属于测试用例的事务保护范围,因此您在 setUpClass() 中所做的任何操作都将“永久”保存在测试数据库中。您需要手动回滚或撤消 setUpClass() 所做的任何数据库更改,否则您将获得交叉测试用例的副作用。

如果您使用的是 Django 1.8,则可以改用 setUpTestData() - 在这种情况下,客户端所做的任何事情都会受到事务的保护。 p>

关于python - 在 setUpClass 中访问 Django 测试客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28084683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com