python - Django 测试 : Using a login decorator for test cases

标签 python django unit-testing authentication decorator

我在 django 测试中使用登录装饰器时遇到问题。许多测试都以

开始
self.client.login(username='foo', password='bar')

所以,登录原则上是有效的;但现在我想将这行代码重构为装饰器 login,只是为了好玩:

def login(fn):
    def wrapper(self):
        self.client.login(username='foo', password='bar')
        return fn(self)
    return wrapper

但随后失败的测试表明,即使 self.client.login 返回 True,用户“foo”也未登录。

还有一件更神秘的事情是,当我现在从装饰器中离开 self.client.login 使得装饰器除了包装之外什么都不做时,从装饰的测试方法中正常登录是不可能的也不再这样了!

我认为测试客户端存在一些上下文或范围问题。你知道问题是什么吗? P.S.:这个故事都是关于 python2.7 和 django-1.3.1 的。

最佳答案

请参阅python-unittest-cant-call-decorated-test

替代方案?

由于它始终是同一用户,因此我将其放在设置中。

class SimpleTest(TestCase):
    def setUp(self):
        self.client.login(username='foo', password='bar')

这是一个有趣的 gist - Lazy man's Django testcase允许范围内的登录。

关于python - Django 测试 : Using a login decorator for test cases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8932950/

相关文章:

python - 加速 Python 中图像距离变换的计算

python - 如何在 C/C++ 扩展模块中创建一个在 Python 代码中定义的类的新实例?

python - python 项目的 sonarqube 没有显示任何测试覆盖率

django - 如何提取 Django Postgres DateRangeField 的一部分

c# - 使用 db 文件进行 sqlite 单元测试

java - 在 Scala 中 stub 网络调用

python - 如何在 Python 中移动文件?

python - 如何根据数据框中的日期时间列值查找列中每个唯一值的前一个值?

python - 根据 OpenApi 3 .yml 架构验证 DRF 响应

python - Django,如何使用 django.contrib.auth.models.User 通过 id 获取用户