在 django 中设置拆卸登录注销的正确方法

Posted

技术标签:

【中文标题】在 django 中设置拆卸登录注销的正确方法【英文标题】:correct way to setup teardown login logout in django 【发布时间】:2014-07-05 15:29:48 【问题描述】:

要测试我使用 django 制作的投票应用程序,voting/viewing_results 的先决条件是用户应该登录。我想创建一个测试套件,其中设置涉及创建 testuser、登录和拆卸涉及登录退出用户并删除用户。

我遇到了 setUp() 和 tearDown() 方法 - 但知道它们是针对测试中的每个方法完成的。我想在类级别拥有此功能,并看到 django 具有 setUpClass 和 tearDownClass - 但由于它们是类方法,我无法对它们执行 self.client.login 、 self.client.logout 。然后我创建了一个具有 setUp 和 tearDown 方法的 LoginMixin。

我想知道这两种方法中哪一种更符合 Python 风格,有没有更好的替代方法,而不是在每次测试之前登录和退出?

    有setUp、tearDown方法:

    默认设置(自我): self.user = utils.create_user() self.client.login(用户名='testuser',密码='testpasswd') def 拆解(自我): self.client.logout() utils.delete_user(self.user)

    拥有一个 LoginMixin 并让每个测试类都派生自它:

    类登录混合(): 默认设置(自我): self.user = create_user() self.client.login(用户名='testuser',密码='testpasswd') def 拆解(自我): self.client.logout() MyTest 类(LoginMixin,TestCase): …… ……

我使用 django_nose 作为 TestRunner。

【问题讨论】:

您使用什么应用程序/模块进行测试?网络测试? 使用 django_nose 作为 Testrunner - 测试是使用这里描述的常用 django 单元测试编写的 - docs.djangoproject.com/en/dev/topics/testing/overview 好吧,就像在 TestCase 文档中一样。创建一个名为Something(TestCase) 的类。然后,对于这个类,创建setUptearDown(每次调用Something 类中的函数时都会调用它们。然后创建您需要的函数测试(名称必须以test_.... 开头。当然, setUp 和 tearDown 将进行登录/注销 已经按照原始帖子完成了这项工作,但是每个方法都调用了 setup、teardown,我想要实现的功能是在类级别登录/注销 - 登录 - 在此运行所有测试类 - 注销。并且这些方法需要使用客户端对象——但它们不能,因为类方法将在类级别而不是在对象级别登录。所以我想知道人们通常遵循的最佳做法是什么。 【参考方案1】:

如果您不使用 setUpClass 类方法的唯一原因是您无权访问默认客户端,您可以创建自己的并参考:

from django.test.client import Client

class LoginMixin():
    client = Client()
    # ...

【讨论】:

以上是关于在 django 中设置拆卸登录注销的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

如何通过测试正确设置和拆卸我的 pytest 类?

如何在 Vue 中设置身份验证状态更改?

在 IB 中设置 UINavigationController 及其 RootViewController 的正确方法

如何在 Django 会话模型中设置自定义字段?

您将如何在 django 中设置“上下文”类型的对象

如何在django中设置用邮箱也可以登录?