Django测试:使用登录装饰器进行测试用例

时间:2012-01-19 20:40:03

标签: python django unit-testing login 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

但是当时失败的测试告诉我用户“foo'未登录,即使self.client.login返回True。

另一个神秘的事情是,当我现在从装饰器中留下self.client.login以使装饰器除了包装之外什么都不做时,那么在装饰测试方法中的正常登录也不再可能了!

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

1 个答案:

答案 0 :(得分:3)

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

的方法?

因为它始终是同一个用户,所以我在setUp中有它。

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

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

相关问题