在 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)
的类。然后,对于这个类,创建setUp
和tearDown
(每次调用Something
类中的函数时都会调用它们。然后创建您需要的函数测试(名称必须以test_....
开头。当然, setUp 和 tearDown 将进行登录/注销
已经按照原始帖子完成了这项工作,但是每个方法都调用了 setup、teardown,我想要实现的功能是在类级别登录/注销 - 登录 - 在此运行所有测试类 - 注销。并且这些方法需要使用客户端对象——但它们不能,因为类方法将在类级别而不是在对象级别登录。所以我想知道人们通常遵循的最佳做法是什么。
【参考方案1】:
如果您不使用 setUpClass
类方法的唯一原因是您无权访问默认客户端,您可以创建自己的并参考:
from django.test.client import Client
class LoginMixin():
client = Client()
# ...
【讨论】:
以上是关于在 django 中设置拆卸登录注销的正确方法的主要内容,如果未能解决你的问题,请参考以下文章